ios - 领域迁移中的转换错误以将属性 Double 更改为 List
问题描述
我需要的是根据以下代码创建要更改discount:Double
为的迁移。discounts:List<Discount>()
这是现有对象:这就是我Realm Object
现在的样子。
class Item:Object{
@objc dynamic var itemName:String = "Some Name"
@objc dynamic var discount:Double = 0 // need to change this property
}
这是我试图做出改变的方式。
新对象:
class Discount: Object {
@objc dynamic var name:String = "Discount Name"
@objc dynamic var discount:Double = 0.0
}
one-to-many
具有关系的修改对象。
class Item:Object{
@objc dynamic var itemName:String = "Some Name"
let discounts = List<Discount>()
}
移民
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 3,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 3) {
migration.enumerateObjects(ofType: Item.className()) { oldObject, newObject in
let oldDiscount = oldObject!["discount"] as! Double
let discount = Discount()
discount.amount = oldDiscount
let discounts = newObject!["discounts"] as! List<Discount>
discounts.append(discount)
}
}
})
我收到错误:
无法将类型的值
RealmSwift.List<RealmSwift.DynamicObject>(0x1c8910068)
转换为RealmSwift.List<AppName.Discount> (0x1c890f6a0)
。
同样,问题是,如何创建要更改discount:Double
为的迁移discounts:List<Discount>()
?
解决方案
您可以像 [oldDiscount] 这样的 List 将折扣属性迁移到新的折扣列表中
这是代码。我重命名了一些对象以使其更加清晰,因为重新使用“折扣”一词来指代类和属性令人困惑。
let vers = UInt64(1)
let config = Realm.Configuration( schemaVersion: vers, migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < vers) {
print("performing migration")
migration.enumerateObjects(ofType: ItemClass.className()) { oldItem, newItem in
let oldDiscount = oldItem!["discount"] as? Double ?? 0.0
let d = DiscountClass()
d.name = "Test"
d.discount = oldDiscount
newItem!["discountList"] = [d]
}
} else {
print("no migration needed")
}
})
推荐阅读
- javascript - 在父级中调整子级 div
- javascript - 你如何从“mouseout”事件的图像中分离 konva 变压器?
- java - 当闹钟响起时,我如何将解雇类用于主要活动?我做不好
- css - 移动设备上的 React App root div 奇怪的宽度
- terminology - 为什么拉斯维加斯算法叫拉斯维加斯?
- android - 当我尝试生成 APK 版本时出现问题
- python - 拆分应用函数 Python 的 DataFrame 列
- windows - 使用 windows 命令将多行合并为一行
- javascript - 有没有更好的方法来检索函数中的 'closeTime'
- c - 我的身高和长度并没有保存我给出的价值