美文网首页
十七、Swift3.0之使用运行时获取属性列表

十七、Swift3.0之使用运行时获取属性列表

作者: ZhengYaWei | 来源:发表于2017-02-27 00:15 被阅读269次

    额外说明:
    1、基本数据类型,在OC中没有可选,如果定义为可选,运行时同样获取不到,使用KVC就会崩溃
    2、private的属性,使用运行时,同样获取不到属性(可以获取到ivar),同样会让KVC崩溃

    class Person: NSObject {
       var name: String?
       
       //基本数据类型,在OC中没有可选,如果定义为可选,运行时同样获取不到,使用KVC就会崩溃
       //var age: Int?
       var age: Int = 0
       
       //private的属性,使用运行时,同样获取不到属性(可以获取到ivar),同样会让KVC崩溃
       //private var title: String?
       var title: String?
       
       //运行时获取到对象的属性列表:通过KVC动态的设置值
       //运行时获取对象的方法列表:通过setMessage动态的发送任何消息
       //运行时获取对象的ivars列表:这是所有第三方框架字典转模型的基础
       
       //目标:使用运行时获取当前类所有属性的数组
       //class修饰类方法
       class func propertyList() -> [String]{
           //注意这里一定要用var
           var count: UInt32 = 0
           //1、获取类的属性列表  返回属性列表的数组(这是可选项)
           //<#T##outCount: UnsafeMutablePointer<UInt32>!##UnsafeMutablePointer<UInt32>!#>可变的Unit32类型的指针
           var list = class_copyPropertyList(self, &count)
           print("属性的数量:\(count)")
           
           //2、遍历数组
    //        for i in 0..<Int(count){
    //            //3、根据下标获取属性
    //            //objc_property_t?
    //            let pty = list?[i]
    //            //4、获取属性的名称 (c语言的字符串)
    //            let cName = property_getName(pty!)
    //            //5、转换成OC的字符串
    //            let name = String(utf8String: cName!)
    //            print(name ?? "")
    //        }
           //改写
           for i in 0..<Int(count){
               //使用guard let语法一次判断每一项是否有值,只要有一项为nil,就不在执行后续的代码。
               //3、根据下标获取属性
               //4、获取属性的名称 (c语言的字符串)
               guard let pty = list?[i],let cName = property_getName(pty) else{
                   //继续遍历下一个
                   continue
               }
               //5、转换成OC的字符串
               let name = String(utf8String: cName)
               print(name ?? "")
           }
    
        //6、释放C语言的对象
        free(list)
        //[]是一个空数组
        return []
    }
    

    }

    相关文章

      网友评论

          本文标题:十七、Swift3.0之使用运行时获取属性列表

          本文链接:https://www.haomeiwen.com/subject/tcwawttx.html