【问题标题】:Parse JSON and save with Realm解析 JSON 并使用 Realm 保存
【发布时间】:2016-02-26 21:51:05
【问题描述】:

我有这个 JSON 数据:

{
  "id": 120,
  "userId": 1,
  "key": [
    56,
    21,
    133,
    77
  ]
}

我使用JSONHelper解析它,并在本地使用Realm保存。

问题是我无法在本地保存 Int 数组,如果我尝试将对象更改为 Swift 中的简单对象,解析器将无法工作。

型号

class Response: RLMObject, Deserializable {
    dynamic var _id = 0
    dynamic var userId = 0
    var key = List<HashInt>()

    required init(data: JSONDictionary) {
        super.init()
        _id            <-- (data["id"])
        userId         <-- data["userId"]
        key            <-- data["key"]
    }

    override init() {
        super.init()
    }
}

class HashInt: Object, Deserializable {

    dynamic var value = ""

    required init(data: JSONDictionary) {
        super.init()
        value <-- data["value"]
    }

    required init() {
        super.init()
    }
}

我需要解析 Int 数组并使用 Realm 将其保存在本地。我怎样才能做到这一点?

【问题讨论】:

    标签: ios json swift realm


    【解决方案1】:

    首先,您需要在 Realm Swift 和 Realm Objective-C 之间做出选择。你不能把两者混在一起。要么让你的对象从ObjectRLMObject 继承。在我的回答中,我假设您想要完全使用 Swift。

    你不能通过 JSONHelper 进行映射,因为它没有构造 Realm Swift 的 List 类型的概念。但是你可以映射到一个 Swift 数组。

    var keyObjects = [HashInt]()
    keyObjects <-- data["key"]
    for keyObject in keyObjects {
         key.append(keyObject)
    }
    

    如果你有多个一对多的关系,考虑重载 JSONHelper 的映射运算符 (&lt;--) 是有意义的,这样它就支持映射到 Realm Swift 的 List 类型。这可能如下所示。 (未经测试!)

    import RealmSwift
    
    public func <-- <T: Deserializable>(list: List<T>, dataObject: AnyObject?) {
        var newArray = [T]()
        newArray <-- dataObject
        for object in newArray {
           list.append(object)
        }
        return list
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 2015-09-23
      • 2020-03-29
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 2018-07-12
      相关资源
      最近更新 更多