通過以下方式調用可以獲取Swift某一個類中的所有屬性列表, 包括系統(tǒng)的類以及自定義的類
func getPropertyNames(cls: AnyClass) -> [String] {
var propertys: [String] = []
var outCount: UInt32 = 0
guard let peopers = class_copyPropertyList(cls.self, &outCount) else { return [] }
let count:Int = Int(outCount)
for i in 0...(count-1) {
let aPro: objc_property_t = peopers[i]
let proName = String(cString: property_getName(aPro))
propertys.append(proName)
}
return propertys
}
- 我們可以通過獲取屬性列表, 看到系統(tǒng)類有哪些屬性, 并使用KVC去修改該屬性的值
- 如果在項目中你將部分數據存儲在UserDefaults 中, 那么在用戶退出, 或者你的token失效的時候需要清除掉UserDefaults 的內容, 這時就可以獲取屬性列表, 并遍歷刪除該屬性對應的UserDefaults中的內容
- 你可以對比這個項目,來嘗試獲取屬性列表的一個用途
點它UserDefaultDemo
- 你可以對比這個項目,來嘗試獲取屬性列表的一個用途
- 當然獲取屬性列表后我們就可以實現(xiàn)字典轉模型的映射, 這也是Runtime的應用場景
2023年09月24日23:39:59更新
以上方法好像獲取到的不全
更新使用一下代碼:
func getPropertyNames(cls: AnyClass) -> [String] {
var propertys: [String] = []
var outCount: UInt32 = 0
let iVars = class_copyIvarList(cls.self, &outCount)
for i in 0..<outCount {
let ivar = iVars![Int(i)]
let name = ivar_getName(ivar)
let proName = String(cString: name!)
propertys.append(proName)
}
return propertys
}