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属性。我使用它们没有任何问题。

呵。

最新更新