当我们使用主键创建领域对象时:
class Dog: Object {
@objc dynamic var id: Int = 0
@objc dynamic var someValue: Int = 0
override static func primaryKey() -> String? { return "id" }
}
let realm = try! Realm()
realm.write {
let dog = realm.create(Dog.self, value:["id" : 1], update: .modified)
if dog.isNew { //need to check dog is newly created or an existing object.
dog.someValue = 0
} else {
dog.someValue += 1
}
}
我们如何检查上面的dog对象是新创建的还是更新的?
答案 0 :(得分:0)
我不认为create函数有直接的方法来指示对象是已创建还是已修改。但是,这是一个很棒的功能请求;知道对象是在realm.create调用中创建还是存在的,非常方便。
话虽如此,这是一个解决问题的方法,该问题将检查并指示是否创建或修改了对象。
第一次运行代码,它将创建一个主键为0的对象并将其打印到控制台。再次运行它将增加该对象的someValue属性并打印更新的对象someValue。
代码检查具有给定主键的对象是否存在;如果否,则使用默认值someValue创建一个新对象。如果是,则增加someValue并更新对象。
let realm = try! Realm()
let primaryKey = 0
guard let dog = realm.object(ofType: Dog.self, forPrimaryKey: primaryKey) else {
try! realm.write {
let newDog = realm.create(dog.self, value:["id" : primaryKey, "someValue" : 0], update: .modified)
print("new dog created: \(newDog)")
}
return
}
try! realm.write {
dog.someValue += 1
realm.add(dog, update: .modified)
print("existing object updated \(dog)")
}