//基本数据类型,如果定义成可选,运行时同样取不到,使用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 运行时获取对象属性列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)