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

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

推荐阅读更多精彩内容