两个主要问题。 Realm Swift Docs没有给出非常详细的写入事务示例。他们的例子强制尝试捕捉模式,他们只是说'不要在生产中做到这一点"。首先,我正在寻找一个非常好的模式来封装写事务。以下是我目前的工作:
// Define your models like regular Swift classes
public class Dog: Object {
@objc public private(set) dynamic var name: String?
public let age = RealmOptional<Int>()
public private(set) var owner: Person?
}
//MARK: Extension that has functions to update properties
extension Dog {
public func updateName(_ name: String?) throws {
do{
let realm = try Realm()
let inWrite = realm.isInWriteTransaction
if !inWrite {
realm.beginWrite()
}
self.name = name
if !inWrite {
try realm.commitWrite()
}
}catch{
throw error
}
}
}
这种模式反映了Realm使用的try catch模式,并再次保护当前正在写入事务中的域。对这种模式的想法?
我的第二个问题来自必须为我想要更改的每个属性编写这样的函数。他们是一个更有效的方法吗?请记住,如果将更改分组到单个写入事务中,Realm会变得更有效吗?
注意:这种抽象的需要来自于我通常将Realm放在像cocoapod这样的可重用库中。生活在UIViewController
的许多交易代码变得非常混乱。