可以为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)
}
}