快速使用 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 - 返回布尔值的主要内容,如果未能解决你的问题,请参考以下文章