在Swift中使用泛型实例化领域对象

在Swift中使用泛型实例化领域对象,swift,generics,realm,Swift,Generics,Realm,我在一个iOS项目中工作,涉及领域和泛型的使用。我正在探索克隆检索到的领域对象的方法,以便在写事务外部对其进行更新,然后使用泛型将其发送到更新函数 我正面临一个奇怪的问题,我不知道它是与领域相关还是与泛型相关。你的帮助将不胜感激 设置: 一个继承自领域对象的类generiobject,以及一个名为Sale的子类: GenericObject: Object Sale: Generic Object // This class includes a primary key called "i

我在一个iOS项目中工作,涉及
领域
和泛型的使用。我正在探索克隆检索到的
领域
对象的方法,以便在写事务外部对其进行更新,然后使用泛型将其发送到更新函数

我正面临一个奇怪的问题,我不知道它是与
领域相关还是与泛型相关。你的帮助将不胜感激

设置: 一个继承自
领域
对象
的类
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:)
reports
Sale
,但实例被打印为
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的更新

我想花点时间检查一下新编译器和以前的领域版本