swift 的 FMDB 用法 - 返回一个布尔值

FMDB usage with swift - returning a boolean

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

我在执行语句时遇到 return 在 swift 中输入布尔值的问题。这是我在 Objective C class 中使用 FMDB 时可用的更新功能的图像,请注意绝大多数 return bools

下面是 swift 中可用的功能:

没有给我太多工作机会!

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

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

一旦这条语句 运行s 我关闭了数据库 & return 布尔值。这基本上给了我一个完成块,让我保持 UI 直到 sql 成功完成。

不幸的是,swift 我的工作要少得多,而且我并不真正理解 return bools 的函数输入。到目前为止,在我的 swift 数据库 class 中,我 运行 更新如下:

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

给我安全,如果它失败了,但没有办法 return 一个成功的布尔值。我想知道是否有人对实现数据库 class 有任何建议,就像我在 objective c 中展示的那样。

我能看到的唯一选择是重写 objective c 中的 class,但我更愿意将此应用保持 100% swift。

来自 Adopting Cocoa Design Patterns 中 "Using Swift with Cocoa and Objective-C"参考:

Swift automatically translates Objective-C methods that produce errors into methods that throw an error according to Swift’s native error handling functionality.

因此Objective-C方法

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

映射为

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

变成 Swift,并且必须用 try.

(的变体)调用

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

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