2016-08-23 5 views
4

Возможно ли сохранить конкретный общий подкласс в Царстве?Хранение основного подкласса в Realm

Например:

class MyClass<T> : Object{} 

class ConcreteMyClass : MyClass<String> {} 

Я знаю, что это не представляется возможным хранить MyClass в Realm. Однако можно ли как-то сохранить ConcreteMyClass?

ответ

1

Да, можно использовать конкретные общие подклассы для моделей Realm, вам просто нужно сказать Realm игнорировать непрофильные классы:

import Cocoa 
import RealmSwift 

class MyClass<T>: Object { 
    dynamic var parentProp = 0 
    required init() { 
     super.init() 
    } 
} 

class ConcreteMyClass: MyClass<String> { 
    dynamic var childProp = 0 
    required init() { 
     super.init() 
    } 
} 

let realm = try! Realm(configuration: Realm.Configuration(objectTypes: [ConcreteMyClass.self])) 
try! realm.write { 
    realm.add(ConcreteMyClass()) 
} 

print(realm.objects(ConcreteMyClass.self)) 

что журналы:

Results<ConcreteMyClass> (
    [0] ConcreteMyClass { 
     parentProp = 0; 
     childProp = 0; 
    } 
) 
+0

Я знал, что я не могу напрямую хранить дженерики. Однако ConcreteMyClass не является общим, поэтому я надеялся, что это может как-то сработать. – ph1lb4

+1

А, да, это работает! Извините за непонимание вашего вопроса. Было ясно, что я просто неправильно понял. Я переписал свой ответ, чтобы показать, как это сделать. – jpsim

+0

Я пытался реализовать ваше решение. Однако, когда я пытаюсь вызвать ConcreteMyClass() он выходит из строя в следующем методе: @objc частного класса функ getGenericListPropertyNames (объект: AnyObject) -> NSArray Кроме того при отладке я обнаружил, что объект типа MyClass , а не ConcreteMyClass – ph1lb4