假设我有一个json数据对象,我想解析成我自己的对象。我有两种方法可以做到这一点。第一种是使用这样的初始化器:
class DataModelOne {
let firstProperty: String?
let secondProperty: String?
init(json: [Sting: AnyObject]) {
self.firstProperty = json["firstProperty"] as? String
self.secondProperty = json["secondProperty"] as? String
}
}
这将被称为如下:
let object = DataModelOne(json: data)
数据是您尝试解析的JSON。
我遇到的第二种方法是使用计算属性:
class DataModelTwo {
let json: [String: AnyObject]
init(json: [String: AnyObject]) {
self.json = json
}
var firstProperty: String? {
return json["firstProperty"] as? String
}
var secondProperty: String? {
return json["secongProperty"] as? String
}
}
这将以与上面相同的方式初始化:
let object = DataModelTwo(json: data)
除了使用DataObjectTwo转换数据后无法设置属性这一事实,因为这些是计算属性,因此只有get,使用这两种方法解析的优点/缺点是什么?
我没有看到计算属性有任何真正的优势。我更喜欢第一种选择,因为:
DataModelOne
,并手动分配属性。我能想到的计算属性的唯一优点是它会延迟访问字典到最后一刻。如果您从未访问过某个属性,那么它将永远不必首先进入“词典”。但性能的提高可以忽略不计。
最后,我会将初始化程序重命名为init(values:)
。你不是用JSON初始化它,而是使用普通的Swift Dictionary。