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 []; }}
新聞熱點
疑難解答