我有一个简单的对象:
class MyObject : Object {
dynamic var dummyField: String!;
}
和另一个继承自MyObject
的对象:
class MyOtherObject : MyObject {
dynamic var anotherDummyField: String!;
}
现在我做以下事情。我有一个MyObject
的域列表,我创建了MyOtherObject
的实例并尝试将其保存在列表中:
class Operator {
internal var myObjects: List<MyObject>!;
internal var myObject: MyObject!;
func operate() {
self.myObject = MyOtherObject();
self.myObject.dummyField = "dummy field";
self.myObject.anotherDummyField = "another dummy field";
self.myObjects = List<MyObject>();
self.myObjects.append(myObject); // crash!
}
}
它因错误而崩溃:
Terminating app due to uncaught exception 'RLMException', reason: 'Object type 'MyOtherObject' does not match RLMArray type 'MyObject'.'
由于MyOtherObject
是MyObject
的子类,我无法理解为什么应用程序此时崩溃并显示此错误消息。
答案 0 :(得分:6)
领域List
不是协变的。您只能在其中存储具有完全声明类型的对象。
答案 1 :(得分:1)
self.myObjects = List<MyObject>();
这不是一个合适的值
self.myObjects = List<Needs actual object here not class>();