解析JSON并使用Realm保存

时间:2016-02-26 21:51:06

标签: ios json swift realm

我有这个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在本地保存它。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

首先,您需要在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的映射运算符(<--)是有意义的,这样它就支持映射到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
}