В настоящее время моя база данных Realm содержит простой массив из MyData
объектов:
class MyData: Object {
@objc dynamic var name = ""
@objc dynamic var age = 0
}
Например, он может содержать
[
["Alice", 12],
["Bob", 13],
["Alice", 22],
["Carolina", 13],
["Bob", 20]
]
Я собираюсь переделать его так, чтобы сделать name
уникальным, сохранив самый большой age
:
[
["Alice", 22],
["Bob", 20],
["Carolina", 13]
]
Кроме того, я хочу сделать name
первичным ключом, чтобы избежать дублирования в будущем.
Поэтому я изменил описание класса как
class MyData: Object {
@objc dynamic var name = ""
@objc dynamic var age = 0
override static func primaryKey() -> String? {
return "name"
}
}
И теперь мне нужно предоставить блок миграции:
let config = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
switch oldSchemaVersion {
case 0:
migration.enumerateObjects(ofType: MyData.className()) { (oldObject, newObject) in
// how to do it?
}
default:
break
}
})
Я не понимаю, что делать в блоке перечисления. В моем примере у меня есть пять «старых» объектов (без первичного ключа), и у меня будет три «новых» объекта (с первичным ключом), так как же мне выполнить это преобразование?