我一直在尝试抽象一些Realm模型,因此我想创建一个具有泛型类型的超类模型。然后,为特定类型创建子类。
我知道Realm不支持存储泛型。但是,我的问题是:
是否可以存储特定的已定义子类?
因此,想法是拥有一个超类:
class SuperClass<T: RealmCollectionValue> : Object {
@objc dynamic var pk: String = ""
let listProp = List<T>()
convenience init(pk: String){
self.init()
self.pk = pk
}
override static func primaryKey() -> String? {
return "pk"
}
}
然后实现一个特定的子类:
class StringSubClass : SuperClass<String> {}
那么是否可以在Realm中保存 StringSubClass 实例(实际上,它不是通用的)?
从我在这个已经回答的问题中发现的内容(可以接受的答案来看):Store concrete generic subclass in Realm
您可以通过定义仅处理 StringSubClass 的领域来指定忽略 SuperClass 的领域。
但是,在Realm 3.13.1中尝试使用以下方法时:
let realm = try! Realm(configuration: Realm.Configuration(objectTypes: [StringSubClass.self]))
try! realm.write {
realm.add(StringSubClass(pk: "mypk"))
}
存储 StringSubClass
的实例时引发以下异常Terminating app due to uncaught exception 'RLMException', reason: 'Object type 'StringSubClass' is not managed by the Realm. If using a custom `objectClasses` / `objectTypes` array in your configuration, add `StringSubClass` to the list of `objectClasses` / `objectTypes`.'