(swift)运行时 自定义归档 archive Runtime

如果你项目里面的归档用大量的属性,没次增加新的属性时 还需要在归档和解档的方法里写重复的代码,看着重复的代码就特别恶心!……怎么办呢? -- 如果在归档和解档里面用运行时,这个办法就办啦, 想要看源码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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容