通过以下方式调用可以获取Swift某一个类中的所有属性列表, 包括系统的类以及自定义的类
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
}
- 我们可以通过获取属性列表, 看到系统类有哪些属性, 并使用KVC去修改该属性的值
- 如果在项目中你将部分数据存储在UserDefaults 中, 那么在用户退出, 或者你的token失效的时候需要清除掉UserDefaults 的内容, 这时就可以获取属性列表, 并遍历删除该属性对应的UserDefaults中的内容
- 你可以对比这个项目,来尝试获取属性列表的一个用途
点它UserDefaultDemo
- 你可以对比这个项目,来尝试获取属性列表的一个用途
- 当然获取属性列表后我们就可以实现字典转模型的映射, 这也是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
}