Удалите избыточный код из следующего примера - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть 3 структуры, такие как,

struct A: Decodable {
   var color: UIColor? = nil
   var version: String? = nil
   //and few specific to struct A
}

struct B: Decodable {
   var color: UIColor? = nil
   var version: String? = nil
   //and few specific to struct B
}

struct C: Decodable {
   var color: UIColor? = nil
   var version: String? = nil
   //and few specific to struct C
}

У меня есть подкласс UITableViewCell с функцией configure(_ object: Any).Я передаю экземпляр этих трех структур и настраиваю ячейку.

Я сделал что-то вроде

fun configure(_ object: Any) {
  if let aStruct = object as? A {
     view.color = aStruct.color
     label.text = aStruct.version
  } else if let bStruct = object as? B {
     view.color = aStruct.color
     label.text = aStruct.version
  } else if let cStruct = object as? C {
     view.color = aStruct.color
     label.text = aStruct.version
  }
}

Но я не удовлетворен этим подходом, поскольку он ведет к избыточному коду.Можете ли вы предложить мне подход, который удалит этот избыточный код.

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете создать протокол

protocol ProtocolName {
    var color: UIColor? { get set }
    var version: String? { get set }
}

Затем вы настраиваете A, B и C на соответствие этому протоколу, например:

struct A: Decodable, ProtocolName
struct B: Decodable, ProtocolName
struct C: Decodable, ProtocolName

, затем обновляете:

fun configure(_ object: ProtocolName)

Это заставит структуры соответствовать протоколу.Затем в configure вы сможете получить доступ к подмножеству переменных, объявленных в протоколе, без приведения

Проверьте это для получения дополнительной информации https://www.appcoda.com/protocols-in-swift/

...