美文网首页
swift中利用运行时打印对象的所有属性

swift中利用运行时打印对象的所有属性

作者: 6ffd6634d577 | 来源:发表于2016-04-23 13:00 被阅读713次

可以为NSObject扩张一个方法,打印这个对象的所有属性.以后需要的话,就可以直接把这个文件拖过来就行了

import Foundation

extension NSObject
{
    class func printIvars() {
//        利用运行时获取类里面的成员变量
        
        var outCount: UInt32 = 0
        
//        ivars实际上是一个数组
        let ivars = class_copyIvarList(self, &outCount)
        
//        获取里面的每一个元素
        for i in 0..<outCount
        {
//            ivar是一个结构体的指针
            let ivar = ivars[Int(i)]
            
//          获取 成员变量的名称,cName c语言的字符串,首元素地址
            let cName = ivar_getName(ivar)
            
            let name = String(CString: cName, encoding: NSUTF8StringEncoding)
            
            print("name: \(name)")
        }
        
//        方法中有copy,create,的都需要释放
        free(ivars)
    }
}

相关文章

网友评论

      本文标题:swift中利用运行时打印对象的所有属性

      本文链接:https://www.haomeiwen.com/subject/yfnxrttx.html