在Swift中使用泛型实例化领域对象
我在一个iOS项目中工作,涉及在Swift中使用泛型实例化领域对象,swift,generics,realm,Swift,Generics,Realm,我在一个iOS项目中工作,涉及领域和泛型的使用。我正在探索克隆检索到的领域对象的方法,以便在写事务外部对其进行更新,然后使用泛型将其发送到更新函数 我正面临一个奇怪的问题,我不知道它是与领域相关还是与泛型相关。你的帮助将不胜感激 设置: 一个继承自领域对象的类generiobject,以及一个名为Sale的子类: GenericObject: Object Sale: Generic Object // This class includes a primary key called "i
领域
和泛型的使用。我正在探索克隆检索到的领域
对象的方法,以便在写事务外部对其进行更新,然后使用泛型将其发送到更新函数
我正面临一个奇怪的问题,我不知道它是与领域相关还是与泛型相关。你的帮助将不胜感激
设置:
一个继承自领域对象的类generiobject
,以及一个名为Sale
的子类:
GenericObject: Object
Sale: Generic Object // This class includes a primary key called "id"
我从web上获取一个Sale
对象,我可以将其保存在领域
,在写事务之外创建一个新对象(我可以保存它,而不必担心写事务,但我希望在任何更新中使用相同的代码和流)
当我修改对象的属性并尝试更新领域时,它会抛出一个异常,因为找不到主键。(primaryKey在子类Sale
中定义)
我在Sale
中找到了我的newItem()
方法的问题,如下所示:
override func newItem<T:GenericObject>(ofType itemType: T.Type) -> T {
let dictionary = self.getDictionary()
let newItem = T.init()
newItem.updateWithDictionary(dict: dictionary)
print("Type: \(type(of: newItem)) - Object: \(newItem)")
return newItem
}
let newObject = object.newItem(ofType: Sale.self)
self.realm.add(newObject, update: true)
Type: Sale - Object: GenericObject { ....
到目前为止,一切顺利。我从web上检索对象,它就工作了。print()
报告类型(of:)
实例化对象是Sale
,并且对象的打印输出也显示Sale
Type: Sale - Object: Sale { ....
当我更新对象并保存它时,它失败地说,Realm
找不到主键,type(of:)
reportsSale
,但实例被打印为generiobject
超类,如下所示:
override func newItem<T:GenericObject>(ofType itemType: T.Type) -> T {
let dictionary = self.getDictionary()
let newItem = T.init()
newItem.updateWithDictionary(dict: dictionary)
print("Type: \(type(of: newItem)) - Object: \(newItem)")
return newItem
}
let newObject = object.newItem(ofType: Sale.self)
self.realm.add(newObject, update: true)
Type: Sale - Object: GenericObject { ....
此结果运行相同的代码和相同的代码执行。我正在使用Xcode 10和Swift 4.2以及领域3
你知道这里会发生什么吗?六个月后,问题似乎得到了解决,但没有明确的迹象表明发生了什么
截至2019年4月22日,迁移到领域3.14.1、Xcode 10.2.1和Swift 5.0后,我能够使用T.init()获取对象的克隆,并使用发布问题时使用的原始代码将其成功保存在领域外的write事务中
我没有看到任何与Swift 4.2到5.0的语法更改相关的内容,但我知道Xcode 10.2.1包含对LLVM/clang的更新
我想花点时间检查一下新编译器和以前的领域版本