runtime 简单使用

import UIKit

class User: NSObject,NSCopying,NSCoding {

var name = ""
var age = 0

required override init() {
    
}

required init?(coder aDecoder: NSCoder) {
    super.init();
    var count:UInt32 = 0;
    let list = class_copyPropertyList(User.self, &count)
    for i:Int in 0..<Int(count) {
        let property = list![i]
        let key = String.init(cString: property_getName(property))
        self .setValue(aDecoder.decodeObject(forKey: key), forKey: key)
    }
}

func encode(with aCoder: NSCoder) {
    var count:UInt32 = 0;
    let list = class_copyPropertyList(User.self, &count)
    for i:Int in 0..<Int(count) {
        let property = list![i]
        let key = String.init(cString: property_getName(property))
        aCoder .decodeObject(forKey: key)
    }
}
func copy(with zone: NSZone? = nil) -> Any {
    let copyObj = self
    return copyObj
}

override func mutableCopy() -> Any {
    let copyObj = type(of: self).init()
    var count:UInt32 = 0
    let list:UnsafeMutablePointer = class_copyPropertyList(User.self, &count)!
    for i:Int in 0..<Int(count) {
        let property:objc_property_t = list[i]!
        let key = String(cString: ivar_getName(property))
        let obj = self .value(forKey: key)
        copyObj.setValue(obj, forKey: key)
    }
    return copyObj
}

}

我写了个swift 3 的 ,不知道有没有问题,有问题可以帮我指出来,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先介绍一下本文的目录结构 一.Runtime认识 通常我们向一个类或者对象发送一个方法如:[object mes...
    hj的简书阅读 3,570评论 0 1
  • runtime简单使用之给系统类动态添加属性 前言 1, 给类动态添加属性,实质就是让一个属性与某个对象产生关联的...
    Alexander阅读 7,647评论 2 3
  • 一、 发送消息 开发使用场景:调用未暴露的方法,前提条件,这个方法已经实现 导入#import <objc/mes...
    青椒辣不辣阅读 3,315评论 0 0
  • ios runtime 然后我们打开终端,在命令行找到cd到文件目录,然后中输入: clang -rewrite-...
    人生路02阅读 4,536评论 0 2
  • 通常,我们以[object message]这种方式向一个类或者对象发送一个未定义消息时,在Xcode编译的时候就...
    hj的简书阅读 2,523评论 0 1