Swift3.0 运行时获取对象属性列表

Swift3.0 运行时获取对象属性列表,第1张

概述新建一个类:Person.swift,创建两个对象 //基本数据类型,如果定义成可选,运行时同样取不到,使用KVC就会崩溃//var age: Int?var age: Int = 0//private 修饰的属性,使用运行时,同样获取不到属性(可以获取到ivar),也会让KVC崩溃//private var title: String?var title: String? 使用运行时 新建一个类:Person.swift,创建两个对象
//基本数据类型,如果定义成可选,运行时同样取不到,使用KVC就会崩溃//var age: Int?var age: Int = 0//private 修饰的属性,使用运行时,同样获取不到属性(可以获取到ivar),也会让KVC崩溃//private var Title: String?var Title: String?
使用运行时获取当前类所有属性的数组
class func propertyList() -> [String] {    var count: UInt32 = 0    //获取类的属性列表,返回属性列表的数组,可选项    let List = class_copyPropertyList(self,&count)    print("属性个数:\(count)")    //遍历数组    for i in 0..<Int(count) {        //根据下标获取属性        let pty = List?[i]        //获取属性的名称<C语言字符串>        //转换过程:Int8 -> Byte -> Char -> C语言字符串        let cname = property_getname(pty!)        //转换成String的字符串        let name = String(utf8String: cname!)        print(name!)    }    free(List) //释放List    return []}//控制器调用print(Person.propertyList())打印输出:属性个数:2ageTitle[]
使用guard语法改写for循环内部实现
class func propertyList() -> [String] {    var count: UInt32 = 0    //1.获取类的属性列表,&count)    print("属性个数:\(count)")    for i in 0..<Int(count) {        //使用guard语法,一次判断每一项是否有值,只要有一项为nil,就不再执行后续的代码        guard let pty = List?[i],let cname = property_getname(pty),let name = String(utf8String: cname)            else {                //继续遍历下一个                continue        }        print(name)    }    free(List)    return []}
总结

以上是内存溢出为你收集整理的Swift3.0 运行时获取对象属性列表全部内容,希望文章能够帮你解决Swift3.0 运行时获取对象属性列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存