通过Decodable初始化Realm对象

时间:2018-03-20 21:48:54

标签: swift realm

这是我的代码:

matplotlib

这是我的JSON:

class A: Object, Decodable{

    let listA = List<Int>()

    required init() {
        self.init()
    }

    required init(realm: RLMRealm, schema: RLMObjectSchema) {
        fatalError("init(realm:schema:) has not been implemented")
    }

    required init(value: Any, schema: RLMSchema) {
        fatalError("init(value:schema:) has not been implemented")
    }

    private enum CodingKeys: CodingKey{}

    public required convenience init(from decoder: Decoder) throws {
        self.init()
    }
}

class B: A{

    let listB = List<Int>()

    private enum CodingKeys: CodingKey{}

        public required init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            let encoder = try container.superDecoder()
            try super.init(from: encoder)
        }

        required init(value: Any, schema: RLMSchema) {
            fatalError("init(value:schema:) has not been implemented")
        }

        required convenience init() {
            self.init()
        }

        required init(realm: RLMRealm, schema: RLMObjectSchema) {
            fatalError("init(realm:schema:) has not been implemented")
        }
}

如何使用JSON中的所有值初始化对象B?当然,对象A也应该被初始化。我想从解码器中做到这一点,但我的代码中出现了很多错误。

因为Realm强制初始化器很方便,所以我不能从另一个级别调用初始化器。如何更改我的初始值设定项,以便我可以使用从子类(B)一直到顶级类的解码器初始化类B(A)

由于

1 个答案:

答案 0 :(得分:0)

我认为,如果要使用Decodable,则需要创建轻量级结构DecodedObject,然后根据DecodedObject重写属性创建Object本身。

如果要省略DecodedObject步骤,则可以使用ObjectMapper而不是Decodable。