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

问题描述 投票:1回答:1

假设我有一个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,使用这两种方法解析的优点/缺点是什么?

ios swift parsing properties data-modeling
1个回答
1
投票

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

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

我能想到的计算属性的唯一优点是它会延迟访问字典到最后一刻。如果您从未访问过某个属性,那么它将永远不必首先进入“词典”。但性能的提高可以忽略不计。

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

© www.soinside.com 2019 - 2024. All rights reserved.