提问人:Vishnu 提问时间:10/4/2023 最后编辑:Vishnu 更新时间:10/6/2023 访问量:125
Realm Objective-C 到 Swift 的迁移(动态迁移)[复制]
Realm Objective-C to Swift Migration (Dynamic Migration) [duplicate]
问:
在本地数据库中,我们从 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"]
}
}
我们需要一个函数来对每个属性进行迁移,而无需硬编码。根据需要动态处理相应的数据类型。
我们正在努力使动态函数。
答:
-1赞
Vishnu
10/4/2023
#1
下面是领域迁移的动态函数,
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)
}
}
}
}
}
}
}
评论
0赞
Joakim Danielson
10/4/2023
如何迁移 nil 值?
0赞
Vishnu
10/5/2023
Nil 值将保持 nil 或 null。@Joakim丹尼尔森
0赞
Joakim Danielson
10/5/2023
但是你说新数据库将只包含非可选属性,所以很难理解这段代码背后的逻辑。
0赞
Vishnu
10/5/2023
是的,它是。我们正在将每个属性迁移到非可选属性。使用上述功能。
0赞
Jay
10/6/2023
我相信你错过了@JoakimDanielson提出的问题的重点。当前属性是可选的,可以是 nil。如何将 nil(可选)属性迁移到非可选属性。例如,非可选属性不能为 nil,它们必须包含一个值。因此,nil 值不能保持 nil,因为它会崩溃。
评论