首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让Realm和Unbox发挥更好的作用

让Realm和Unbox发挥更好的作用
EN

Stack Overflow用户
提问于 2016-06-10 03:25:08
回答 3查看 543关注 0票数 3

我正在学习在Swift中解析JSON,来自Android/Java,我正在使用John Sundell的Unbox来帮助我,这让我想起了GSON。参考:Unbox pod

我使用Realm作为数据库在本地存储数据。参考:Realm.io

如果能找到一个工作流来解析带有JSON的类并将其保存到Realm,那就太好了。我不希望有一个实现Unboxable的结构和一个实现Object (Realm)的类,因为那样我就必须反映这两个。对于我目前的项目来说,这并不是太多的工作,但它有点丑陋……

你们有没有尝试过类似的工作流程?

EN

回答 3

Stack Overflow用户

发布于 2016-06-10 04:07:17

我不认为你需要两种不同的类型。我的建议是将您的对象创建为从Realm的Object类继承的Swift类,然后使它们符合Unbox提供的Unboxable协议。(尽管Unbox页面上的示例使用了结构模型,但代码或文档中没有任何说明类无法工作的内容。)

Realm模型对象的工作方式与任何其他类一样:除了定义希望存储在数据库中的对象的任何属性外,还可以定义方法和初始化器,甚至可以指定您希望Realm忽略的属性。这允许您创建既充当领域模型又充当与Unbox兼容的JSON模型的对象。

票数 1
EN

Stack Overflow用户

发布于 2017-07-24 21:40:39

一种更简洁的方法,它不需要覆盖所需的初始值设定项(基于Marin Todorov的tweet ):

代码语言:javascript
复制
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")
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-02-16 16:02:15

下面是一个非常适合我的例子:

代码语言:javascript
复制
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"
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37734574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档