在Realm中存储通用子类

时间:2019-03-14 14:59:47

标签: swift generics realm

我一直在尝试抽象一些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`.'

0 个答案:

没有答案