Вы можете просто обработать это в блоке миграции и использовать то же имя свойства, это нормально. Вот код, который перенесет необязательное свойство first_name в необязательное свойство first_name.
Исходный объект выглядит следующим образом
class PersonClass: Object {
@objc dynamic var first_name = ""
, а затем мы изменим свойство на необязательное
class PersonClass: Object {
@objc dynamic var first_name: String? = nil
и вот блок миграции, чтобы сделать это. Первая версия была 1 (с необязательным first_name), а версия 2 имеет обновленный объект.
let vers = UInt64(2)
let config = Realm.Configuration( schemaVersion: vers, migrationBlock: { migration, oldSchemaVersion in
print("oldSchemaVersion: \(oldSchemaVersion)")
if (oldSchemaVersion < vers) {
print(" performing migration")
migration.enumerateObjects(ofType: PersonClass.className()) { oldItem, newItem in
newItem!["first_name"] = oldItem!["first_name"]
}
}
})
Это оставит существующие данные без изменений. Мы постоянно используем этот вид миграции, так как наше приложение нуждается в изменениях.