как клонировать объектную модель Swift - PullRequest
0 голосов
/ 24 июня 2018

Я хочу использовать Зеркало для добавления в родительский класс без необходимости добавления клона дочернего класса

Как вы думаете, это возможно?

Базовый класс:

class BaseModel {

 func clone() -> BaseModel {

          let mirror = Mirror(reflection : self)
           for (lable , value) in mirror.children {

             }
          return ...
   }
}

подкласс:

class UserModel:BaseModel {

   var name:String!
   var family:String!

}

использование:

 let cloneModel = self.userModel.clone()

1 Ответ

0 голосов
/ 24 июня 2018

Необходимо реализовать протокол NSCopying и переопределить функцию copy(with:):

class BaseModel: NSCopying {

   var xx: String?
   var yy: Int?

   private init(xx: String, yy: Int) {
       self.xx = xx
       self.yy = yy
   }

   func copy(with zone: NSZone? = nil) -> Any {
       let copy = BaseModel(xx: xx, yy: yy)
       return copy
   }
}

Использование:

let clone = model.copy() as! BaseModel

Или вы можете обратиться к этому ответу: https://stackoverflow.com/a/32113575/3882414

...