FMDB与swift一起使用 - 返回一个布尔值

时间:2018-02-07 13:19:30

标签: objective-c swift fmdb

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

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

FMDB update objc

以下是swift中可用的函数: FMDB update 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,我的工作量很少,而且我不太了解返回bool的函数输入。到目前为止,在我的swift数据库类中,我运行如下更新:

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

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

我能看到的唯一选择是在目标c中重写该类,但我更愿意保持这个应用程序100%快速。

1 个答案:

答案 0 :(得分:1)

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

  

Swift会自动将产生错误的Objective-C方法转换为根据Swift的本机错误处理功能引发错误的方法。

因此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