Преимущества / недостатки анализа данных с использованием инициализатора и вычисляемых свойств - PullRequest
0 голосов
/ 06 сентября 2018

Допустим, у меня есть объект данных 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 Ответ

0 голосов
/ 06 сентября 2018

Я не вижу реального преимущества для вычисляемых свойств. Я предпочитаю первый вариант, потому что:

  1. Это отделяет вашу модель данных от JSON. С помощью первой опции вы можете создать экземпляр DataModelOne без JSON и назначить свойства вручную.
  2. Это понятнее, потому что разбор происходит в одном месте.
  3. Вам не нужно хранить словарь, как вы делаете с вычисленными свойствами. Таким образом, если словарь содержит много других данных, которые могут быть отброшены, он может освободить часть памяти.

Единственное преимущество вычисляемых свойств, о которых я могу подумать, заключается в том, что они задерживают доступ к Словарю до последнего момента. Если вы никогда не получите доступ к свойству, ему никогда не придется обращаться к Словарю. Но увеличение производительности будет незначительным.

Наконец, я бы переименовал инициализатор во что-то вроде init(values:). Вы инициализируете его не JSON, а простым словарём Swift.

...