检查领域创建函数,返回新的或更新的对象

时间:2019-06-28 13:13:37

标签: ios swift realm realm-mobile-platform

当我们使用主键创建领域对象时:

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对象是新创建的还是更新的?

1 个答案:

答案 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)")
}