博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios/swift之反射
阅读量:4290 次
发布时间:2019-05-27

本文共 1875 字,大约阅读时间需要 6 分钟。

 

Swift的反射机制是基于一个叫Mirror的结构体来实现的。你为具体的实例创建一个Mirror对象,然后就可以通过它查询这个实例 

Mirror结构体常用属性:

subjectType:对象类型
children:反射对象的属性集合
displayStyle:反射对象展示类型 

目前反射的应用比较局限,这里做简单的介绍

1.*******//分别获取父亲和子类的属性值********

//分别获取父亲和子类的属性值class fatherClass: NSObject {    var name:String = "fuMName"    var qq: String = "fuQQ"}class childrenClass: fatherClass {    var age:Int = 50    var sex:Bool = true        class func test() {        let obj: childrenClass = childrenClass()        let morror = Mirror.init(reflecting: obj)        let superMorror = Mirror.init(reflecting: obj).superclassMirror                for (name, value) in (superMorror?.children)! {//获取父类的属性和值            print("父类属性名:\(String(describing: name)) 值: \(value)")        }        for (name, value) in (morror.children) {//获取子类的属性和值            print("子类属性名:\(String(describing: name)) 值: \(value)")        }    }} 打印结果://父类属性名:Optional("name") 值:fuName//父类属性名:Optional("qq") 值:fuQQ//子类属性名:Optional("age") 值: 1//子类属性名:Optional("sex") 值: true

2.***********获取对象的属性********

let muselect = LYBreflectView.init(frame: CGRect.init(x: 0, y: 0, width: WIDTH, height: HEIGHT))        muselect.name="lambo"        muselect.age=10        let mirror:Mirror = Mirror(reflecting: muselect)//LYBreflectView对象的反射        print("获取对象类型:\(mirror.subjectType)")               //反射的所有自元素都是对象的属性,通过label获取对象的属性名,value获取对象的属性值        for p in mirror.children {            let propertyNameString = p.label!  // 属性名使用!,label是optional类型,要强制解包            let value = p.value                // 属性的值            print("\(propertyNameString)的值为:\(value)")        }                         // 遍历获取对象所有动态的属性类型        for p in mirror.children {            let propertyNameString = p.label!            let value = p.value            let vMirror = Mirror(reflecting: value)  // 通过值来创建属性的反射            print("属性\(propertyNameString)类型为:\(vMirror.subjectType)")        }

 

转载地址:http://ymmgi.baihongyu.com/

你可能感兴趣的文章
Android中实现微信本地视频发布到朋友圈功能
查看>>
非替代品,MongoDB与MySQL对比分析
查看>>
Hadoop平台相关技术
查看>>
java学习11天-自定义异常&异常转换(实例应用)
查看>>
MySql、SqlServer、Oracle数据库行转列大全
查看>>
程序员常用的自助建站资源汇总!
查看>>
分布式与集群的区别是什么?
查看>>
MySql常用必备脚本大全
查看>>
Velocity初探小结--velocity使用语法详解
查看>>
设计模式学习 - Singleton Pattern
查看>>
学习Spring——依赖注入
查看>>
CSS3 transform 属性详解
查看>>
Java对象内存结构及大小计算
查看>>
Spring MVC注解的一些案列
查看>>
Web大文件断点续传,快来看看吧!
查看>>
javascript高级编程3第二章:在html中使用javascript
查看>>
Android中热修复框架AndFix原理解析及案例使用
查看>>
手写代码实现EventBus
查看>>
关于JSON的相关知识
查看>>
SpringMVC基础_常用注解
查看>>