Realm Objective-C 到 Swift 迁移(动态迁移)

问题描述 投票:0回答:1

在本地数据库中,我们从 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"]
                    }
                }

我们需要一个函数来为每个属性进行迁移而无需硬编码。根据需要动态处理相应的数据类型。

我们正在尝试制作动态功能。

swift objective-c realm realm-migration
1个回答
0
投票

这里是领域迁移的动态函数,

        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)
                                }
                            }
                        }
                    }
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.