快速使用 FMDB - 返回布尔值

Posted

技术标签:

【中文标题】快速使用 FMDB - 返回布尔值【英文标题】:FMDB usage with swift - returning a boolean 【发布时间】:2018-02-07 13:19:30 【问题描述】:

我目前正在快速构建一个应用程序,它使用 FMDB 与存储在设备上的数据库进行交互。我选择使用 FMDB,因为我有使用 Objective C 的经验,并且它说它支持 swift。

我在执行语句时遇到了快速返回布尔值的问题。这是我在 Objective C 类中使用 FMDB 时可用的更新函数的图像,请注意绝大多数返回布尔值的方式

以下是 swift 中可用的函数:

没有给我太多的工作!

这是我目前在应用中使用的现有查询(名称已更改)。

sql = @"INSERT INTO Table (IdValue, AnotherIDValue) VALUES (?, ?);";
BOOL success =  [db executeUpdate:sql,
                 [NSNumber numberWithLong:preference.idvalue1],
                 [NSNumber numberWithLong:preference.idvalue2],
                 nil];

一旦该语句运行,我将关闭数据库并返回布尔值。这基本上给了我一个完成块,让我保持 UI 直到 sql 成功完成。

不幸的是,我使用 swift 的工作少了很多,而且我并不真正了解返回布尔值的函数输入。到目前为止,在我的 swift 数据库类中,我运行如下更新:

try! db.executeUpdate(sqlStatement, values: dataArray)

如果失败,给我安全,但无法返回成功布尔值。我想知道是否有人对实现我在目标 c 中展示的数据库类有任何建议。

我能看到的唯一替代方法是重写目标 c 中的类,但我更愿意让这个应用程序 100% 快速运行。

【问题讨论】:

@MartinR 我担心你会这么说。还是让我的代码膨胀一点,谢谢 请注意,try! 不会给您带来安全感。如果语句失败,我将用运行时异常中止程序。 【参考方案1】:

来自Adopting Cocoa Design Patterns “将 Swift 与 Cocoa 和 Objective-C 结合使用”参考:

根据 Swift 的原生错误处理功能,Swift 会自动将产生错误的 Objective-C 方法转换为抛出错误的方法。

因此Objective-C方法

- (BOOL)executeUpdate:(NSString *)sql values:(NSArray *_Nullable)values error:(NSError *_Nullable __autoreleasing *)error

映射为

func executeUpdate(sql: String, values: [Any]?) throws 

进入 Swift,并且必须使用 try 的(变体)调用。

如果您只对成功/失败状态感兴趣,而不是 在实际的错误消息中(如在您的目标代码中),然后 您可以使用try?,如果评估失败,则评估为nil

let success = (try? db.executeUpdate(sqlStatement, values: dataArray)) != nil

【讨论】:

以上是关于快速使用 FMDB - 返回布尔值的主要内容,如果未能解决你的问题,请参考以下文章

FMDB 不能快速工作?

iOS 数据库开源框架FMDB的快速入门与使用

用 FMDB 快速保存 NSI​​mage

FMDB 二次封装工具类,让你快速学会封装,集成数据库

如何处理返回布尔值的 GraphQL 查询?

在 Alamofire 参数中快速发送布尔值