【发布时间】:2017-11-02 16:59:49
【问题描述】:
试图将我的一些代码库切换到 Swift 4 的新漂亮 Codable 协议。我的设置如下所示:
class Base: Object, Codable {
dynamic var id: String = ""
dynamic var timestamp: String = ""
private enum CodingKeys: String, CodingKey {
case id = "_id"
case timestamp = "timestamp"
}
}
class User: Base {
dynamic var name: String = ""
private enum CodingKeys: String, CodingKey {
case name = "name"
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.name = try container.decode(String.self, forKey: .name)
try super.init(from: decoder)
}
}
我有一个符合Codable 的基本领域对象类,以及一个Base 的子类,它也有自己的编码键。我在User 子类上覆盖init(decoder:) 以映射我的其他编码键,然后调用super.init(decoder:) 来映射Base 的编码键。但是,一旦我覆盖了init(decoder:),我就会收到以下错误:
- 必需的初始化程序“init()”必须由“Base”的子类提供
- 必需的初始化程序“init(realm:schema:)”必须由“Base”的子类提供
- 必需的初始化程序“init(value:schema:)”必须由“Base”的子类提供
我不确定解决这些问题的正确方法是什么。
【问题讨论】:
-
不支持RealmObjects之间的继承
-
看起来应该支持对象之间的继承:realm.io/docs/swift/latest/#model-inheritance