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
我目前正在 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