我有这个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在本地保存它。我怎样才能做到这一点?
答案 0 :(得分:3)
首先,您需要在Realm Swift和Realm Objective-C之间做出决定。你不能混合两者。您可以让对象继承自Object
或RLMObject
。在我的回答中我会假设,你想要完整的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
}