簡體   English   中英

Realm Swift中的嵌套寫入事務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM