如果你项目里面的归档用大量的属性,没次增加新的属性时 还需要在归档和解档的方法里写重复的代码,看着重复的代码就特别恶心!……怎么办呢? -- 如果在归档和解档里面用运行时,这个办法就办啦, 想要看源码demo只需要点击 github 废话不多说直接上代码
1. 自定义属性
var name :String?
var address :String?
var professional:String?
var age :Int = 0
2.归档
internal func encodeWithCoder(aCoder: NSCoder){
var count :UInt32 = 0
let ivar = class_copyIvarList(Person.self, &count)
for i in 0..<Int(count) {
let iv = ivar[i]
//获取成员变量的名称 -》 c语言字符串
let cName = ivar_getName(iv)
//转换成String字符串
guard let Strname = String(UTF8String: cName) else{
//继续下一次遍历
continue
}
//利用kvc 取值
let value = self.valueForKey(Strname)
aCoder.encodeObject(value, forKey: Strname)
// print(value)
}
// 释放c 语言对象
free(ivar)
}
3.解档
internal required init?(coder aDecoder: NSCoder){
super.init()
var count :UInt32 = 0
let ivar = class_copyIvarList(Person.self, &count)
for i in 0..<Int(count) {
let iv = ivar[i]
//获取成员变量的名称 -》 c语言字符串
let cName = ivar_getName(iv)
//转换成String字符串
guard let Strname = String(UTF8String: cName) else{
//继续下一次遍历
continue
}
//进行解档取值
let value = aDecoder.decodeObjectForKey(Strname)
//利用kvc给属性赋值
setValue(value, forKeyPath: Strname)
// print(value)
}
// 释放c 语言对象
free(ivar)
、