Swift Runtime获取属性列表

通过以下方式调用可以获取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中的内容
    1. 你可以对比这个项目,来尝试获取属性列表的一个用途
      点它UserDefaultDemo
    1. 当然获取属性列表后我们就可以实现字典转模型的映射, 这也是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
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • swift 也可以通过运行时获取类的属性列表和 ivar 列表 新建一个model 类 并且添加属性 下面是获取 ...
    很着急丶阅读 1,137评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,170评论 1 32
  • 男神简介: 姓名:克雷格勒鲁 身高:189cm 腰围:80cm 头发:棕色 眼睛:蓝色 鞋码:44码 其实很多时候...
    欧美男神阅读 397评论 0 0
  • 1.高手的仪式感有很多吧。第一次听到仪式感这个词时,是一位朋友和我说的,她说一年中的每个节日她都需要收到老公送的礼...
    甘恩阅读 127评论 0 2
  • 岁月承载着生活走过数十年,到今天为止我却成了一个自己非常不满意的性格――胆小怯懦,自尊好强却又敏感脆弱,遇人说话唯...
    恒思阅读 581评论 1 3