Swift uses runtime to archive the model
Func encode (with Acoder:nscoder) {var count:uint32 = 0 Let propertylist = class_copypropertylist ( Self.classforcoder, &count) for index of 0..<int (count) {Guard Let pty = propertylist?[ Index], let CName = Property_getname (pty), let name = String (utf8string:cname) Else { Continue} Let value = Self.value (forkey:name) Acoder.encode (value, Forkey : Name)} free (propertylist)} required init? (Coder Adecoder:nscoder) {super.init () var count:uint32 = 0 Let propertylist = class_copypropertylist (self.classforc oder, &count) for index of 0..<int (count) {Guard Let pty = propertylist?[ Index], let CName = Property_getname (pty), let name = String (utf8string:cname) Else { Continue} Let value = Adecoder.decodeobject (forkey: name) Self.setvalue (value, Forkey:name)} free (PropertyList)}
Both the value and the assignment are using KVC:
Value:
Let value = self.value (forkey:name) Acoder.encode (value, Forkey:name)
Assignment value:
Let value = adecoder.decodeobject (forkey:name) self.setvalue (value, Forkey:name)
Swift uses runtime to archive the model