我如何知道特定交易何时完成?
我希望在事务完成后运行特定的代码块.我怎样才能做到这一点?
我在下面的战争中进行写作 -
do {
try realm.write({
realm.add(<some object>)
})
}
catch {}
Run Code Online (Sandbox Code Playgroud)
mar*_*ius 10
事务是同步执行的.因此,您可以在执行事务后立即执行代码.
如果您不提供任何类型的错误处理,我建议如下所示"强制尝试"以在出现错误时中止.如果磁盘空间不足,则事务将无法恢复.在大多数情况下,您可能希望在事务之后的代码中运行,您的数据是持久的,这在发生错误时不适用.此外,如果保持catch路径完全为空,则在开发中看不到任何错误.
try! realm.write {
realm.add(<some object>)
}
runMoreCode()
Run Code Online (Sandbox Code Playgroud)
最好的方法是将方法编写为Realm对象的扩展。
对于斯威夫特 3+
extension Realm {
/// Performs actions contained within the given block
/// inside a write transaction with completion block.
///
/// - parameter block: write transaction block
/// - parameter completion: completion executed after transaction block
func write(transaction block: (Void) -> Void, completion: (Void) -> Void) throws {
try write(block)
completion()
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特2.0
extension Realm {
/** Performs actions contained within the given block inside a write transaction with
completion block.
- parameter block: write transaction block
- completion: completion executed after transaction block
*/
func write(@noescape transactionBlock block: Void -> (), completion: Void -> ()) throws {
do {
try write(block)
completion()
} catch {
throw error
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以像常规方法一样使用该扩展write(_:)。
let realm = try! Realm()
let object = SomeObject()
try! realm.write(
transactionBlock: {
realm.add(object)
},
completion: {
print("Write transaction finished")
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3322 次 |
| 最近记录: |