【问题标题】:Store concrete generic subclass in Realm在 Realm 中存储具体的泛型子类
【发布时间】:2016-08-23 08:36:48
【问题描述】:

是否可以在 Realm 中存储一个具体的泛型子类?

例如:

class MyClass<T> : Object{}

class ConcreteMyClass : MyClass<String> {}

我知道在 Realm 中存储 MyClass 是不可能的。但是,是否有可能存储 ConcreteMyClass

【问题讨论】:

    标签: ios swift realm


    【解决方案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;
        }
    )
    

    【讨论】:

    • 我知道我不能直接存储泛型。但是 ConcreteMyClass 本身并不是通用的,因此我希望这可能会以某种方式起作用。
    • 啊,是的,行得通!很抱歉误解了你的问题。很清楚,我只是看错了。我已经重写了我的答案以展示如何做到这一点。
    • 我正在尝试实施您的解决方案。但是,当我尝试调用 ConcreteMyClass() 时,它会在以下方法中崩溃:@objc private class func getGenericListPropertyNames(object: AnyObject) -> NSArray 另外,在调试时我发现对象的类型是 MyClass 而不是 ConcreteMyClass
    • 这可能并不完全有效。 Realm 根本不测​​试这种情况。我建议您提出一个功能请求以正式支持具体的泛型模式类,理想情况下,请列出今天不起作用的东西。
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多