Я пытался немного абстрагировать свои модели 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 (как на самом деле, это не универсальный)?
Из того, что у меня естьнайденный в этом уже отвеченном вопросе (который возможен с принятым ответом): Хранить конкретный родовой подкласс в Сфере
Вы можете указать Сферу, чтобы игнорировать Суперкласс определив его для обработки только StringSubClass .
Однако при попытке его в 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`.'