首页 > 学院 > 开发设计 > 正文

Swift3.0--运行时加载属性列表

2019-11-09 15:43:39
字体:
来源:转载
供稿:网友
import UIKitclass Person: NSObject {    var name: String?;    var age: Int = 0;    var title: String?;    //PRivate,在运行时同样获取不到属性,(可以获取到ivar),同样会让KVC崩溃    //    private var title: String?;            // 目标:获取当前类所有属性的数组,使用运行时    class func propertyList () -> [String] {                //1.获取类的属性列表        var count: UInt32 = 0;                let list = class_copyPropertyList(self, &count);                //2.遍历数组//        for i in 0..<Int(count) {//            //            //3.根据下标获取属性//            //objc_property_t//            let pty = list?[i];//            //            //4.获取属性的名称 - c语言字符串//            // <Int8> -> c语言的字符串//            let cname = property_getName(pty!);//            //            //5.转换成oc的字符串//            let name = String(utf8String: cname!);//            //            print(name ?? "");//            //        }                        for i in 0..<Int(count) {                        //3.根据下标获取属性            //使用 guard 语法,以此判断是否有值,只要有一项为nil,就不再执行后续代码            guard let pty = list?[i],                  let cname = property_getName(pty),                  let name = String(utf8String: cname)            else {                //继续下一个循环                continue;            }                        //name是一定有值的            print(name);                    }                        //6.释放c 的对象        free(list);                print("属性的数量: /(count)");                return [];    }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表