假设我有一个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强制转换数据后无法设置属性的事实(因为这些属性是计算属性,因此只能获取)之外,使用这两种方法进行解析的优缺点是什么?
答案 0 :(得分:1)
我看不出计算出的属性有任何真正的优势。我更喜欢第一种选择,因为:
DataModelOne
而没有任何JSON,并手动分配属性。我能想到的计算属性的唯一优点是,它延迟了对Dictionary的访问。如果您从未访问过某个属性,则永远不必首先进入字典。但是性能的提高可以忽略不计。
最后,我将初始化器重命名为init(values:)
之类的东西。您不是使用JSON进行初始化,而是使用普通的Swift字典。