Проверьте функцию создания области, возвращающую новый или обновленный объект - PullRequest
0 голосов
/ 28 июня 2019

Когда мы создаем объект области с первичным ключом:

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
    }
}

как мы можем проверить, что объект собаки выше создан или обновлен?

1 Ответ

0 голосов
/ 29 июня 2019

Я не верю, что у функции 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)")
}
...