[英]Nested write transactions in Realm Swift
當我構建更新領域對象的方法時,如果最好將write
/ beginWrite
放在方法中以獲得原子性並保持調用者清潔,或者在調用者中避免嵌套事務的風險,那么我總是遇到困境。
出於這個原因,我正在考慮一種無風險地嵌套事務的方法,並且我使這個函數采用原始write
並稍微修改它:
extension Realm {
func writeNested(_ block: (() throws -> Void)) throws {
let isNested = isInWriteTransaction
if !isNested { beginWrite() }
do {
try block()
} catch let error {
if isInWriteTransaction { cancelWrite() }
throw error
}
if !isNested && isInWriteTransaction { try commitWrite() }
}
}
我沒有想到有什么缺點嗎?
我沒有意識到任何缺點。 事實上,我自己完成了同樣的事情。 我有一個Realm幫助文件,它有一個Realm擴展,其代碼與上面的代碼非常相似,但也有類似用途的額外函數:
func addSafe<T : Object>(_ object: T)
func addSafe<T : Object>(_ objects: [T])
func deleteSafe<T : Object>(_ object: T)
func deleteSafe<T : Object>(_ objects: [T])
他們通過首先檢查isInWriteTransaction
屬性來添加/刪除對象。 我使用它們沒有任何問題。
HTH。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.