gpt4 book ai didi

ios - 使用初始化程序与计算属性解析数据的优点/缺点

转载 作者:行者123 更新时间:2023-11-28 05:53:09 30 4
gpt4 key购买 nike

假设我有一个 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 转换数据后无法设置属性这一事实之外,因为这些是计算属性,因此只能获取,使用这两种方法进行解析的优点/缺点是什么?

最佳答案

我看不到计算属性有任何真正的优势。我更喜欢第一个选项,因为:

  1. 这将您的数据模型与 JSON 分离。使用第一个选项,您可以在没有任何 JSON 的情况下实例化 DataModelOne,并手动分配属性。
  2. 它更清晰,因为解析发生在一个地方。
  3. 您不必像处理计算属性那样随身携带字典。所以如果字典中包含很多其他可以丢弃的数据,它可以释放一些内存。

我能想到的计算属性的唯一优点是它将对字典的访问延迟到最后一刻。如果您从不访问某个属性,那么它永远不必首先访问 Dictionary。但是性能的提升可以忽略不计。

最后,我会将初始化程序重命名为类似init(values:) 的名称。您不是使用 JSON 初始化它,而是使用普通的 Swift 字典。

关于ios - 使用初始化程序与计算属性解析数据的优点/缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52203272/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com