在本地数据库中,我们从 Realm (Obj-C) 迁移到 RealmSwift。迁移后,我们在本地数据库中遇到了一个问题,就像所有属性在 Obj-C 中都被声明为可选。然而,我们在 swift db 中使用了非可选。现在,我们被迫将整个数据库迁移到新数据库。
我们无法手动迁移每个属性。 喜欢,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
migration.enumerateObjects(ofType: User.className()) { oldObject, newObject in
newObject!["Id"] = oldObject!["Id"]
}
}
我们需要一个函数来为每个属性进行迁移而无需硬编码。根据需要动态处理相应的数据类型。
我们正在尝试制作动态功能。
这里是领域迁移的动态函数,
migrationBlock: { migration, oldSchemaVersion in
if oldSchemaVersion < 1 {
for objectSchema in migration.oldSchema.objectSchema {
for property in objectSchema.properties {
if property.isOptional {
migration.enumerateObjects(ofType: objectSchema.className) { oldObject, newObject in
if let oldValue = oldObject?[property.name] as? String {
newObject![property.name] = String(oldValue)
}
if let oldValue = oldObject?[property.name] as? Int {
newObject![property.name] = Int(oldValue)
}
if let oldValue = oldObject?[property.name] as? Bool {
newObject![property.name] = Bool(oldValue)
}
}
}
}
}
}
}