发布于 2016-06-10 04:07:17
我不认为你需要两种不同的类型。我的建议是将您的对象创建为从Realm的Object类继承的Swift类,然后使它们符合Unbox提供的Unboxable协议。(尽管Unbox页面上的示例使用了结构模型,但代码或文档中没有任何说明类无法工作的内容。)
Realm模型对象的工作方式与任何其他类一样:除了定义希望存储在数据库中的对象的任何属性外,还可以定义方法和初始化器,甚至可以指定您希望Realm忽略的属性。这允许您创建既充当领域模型又充当与Unbox兼容的JSON模型的对象。
发布于 2017-07-24 21:40:39
一种更简洁的方法,它不需要覆盖所需的初始值设定项(基于Marin Todorov的tweet ):
class Car: Object, Unboxable {
dynamic var vendor: String = ""
dynamic var modelName: String = ""
dynamic var electric: Bool = false
required convenience init(unboxer: Unboxer) throws {
self.init()
self.vendor = try unboxer.unbox(key: "vendor")
self.modelName = try unboxer.unbox(key: "modelName")
self.electric = try unboxer.unbox(key: "electric")
}
}发布于 2017-02-16 16:02:15
下面是一个非常适合我的例子:
class ProviderRealm: Object, Unboxable {
dynamic var identifier: String = "demo"
dynamic var name: String?
dynamic var logo: String?
/// Initializer used for unboxing of JSON string
required init(unboxer: Unboxer) throws {
self.identifier = (try? unboxer.unbox(key: "identifier")) ?? "demo"
self.name = try? unboxer.unbox(key: "name")
self.logo = try? unboxer.unbox(key: "logo")
super.init()
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init() {
super.init()
}
required init(value: Any, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
override static func primaryKey() -> String? {
return "identifier"
}
}https://stackoverflow.com/questions/37734574
复制相似问题