import UIKitclass Person: NSObject { var name: String?; var age: Int = 0; var title: String?; //PRivate,在运行时同样获取不到属性,(可以获取到ivar),同样会让KVC崩溃 // private var title: String?; // 目标:获取当前类所有属性的数组,使用运行时 class func propertyList () -> [String] { //1.获取类的属性列表 var count: UInt32 = 0; let list = class_copyPropertyList(self, &count); //2.遍历数组// for i in 0..<Int(count) {// // //3.根据下标获取属性// //objc_property_t// let pty = list?[i];// // //4.获取属性的名称 - c语言字符串// // <Int8> -> c语言的字符串// let cname = property_getName(pty!);// // //5.转换成oc的字符串// let name = String(utf8String: cname!);// // print(name ?? "");// // } for i in 0..<Int(count) { //3.根据下标获取属性 //使用 guard 语法,以此判断是否有值,只要有一项为nil,就不再执行后续代码 guard let pty = list?[i], let cname = property_getName(pty), let name = String(utf8String: cname) else { //继续下一个循环 continue; } //name是一定有值的 print(name); } //6.释放c 的对象 free(list); print("属性的数量: /(count)"); return []; }}
新闻热点
疑难解答