Realm-C到Swift迁移(动态迁移)[复制]

avkwfej4  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(88)

此问题已存在

iOS RealmSwift DB Migration Primary Keys
9天前关闭
在本地数据库中,我们从Realm(Obj-C)迁移到了RealmSwift。迁移后,我们在本地数据库中遇到了一个问题,就像所有属性在Obj-C中都被声明为Optional一样。在swift db中使用non-optional。现在,我们被迫将整个数据库迁移到新数据库。
我们不能手动迁移每个属性。比如

migrationBlock: { migration, oldSchemaVersion in
                if (oldSchemaVersion < 1) {
                    migration.enumerateObjects(ofType: User.className()) { oldObject, newObject in
                        newObject!["Id"] = oldObject!["Id"]
                    }
                }

我们需要一个函数来为每个属性进行迁移,而无需硬编码。根据需要动态处理相应的数据库。
我们正在努力使动态功能。

3phpmpom

3phpmpom1#

下面是域迁移的动态函数,

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

相关问题