Swift - 反射Mirror

作者: __Mr_Xie__ | 来源:发表于2019-01-09 15:40 被阅读0次

在Swift中并不提倡使用Runtime,而是像其他语言一样使用反射(Reflect)。当然,目前Swift中的反射还没有其他语言中的反射功能强大,不仅远不及OC的Runtime,离Java的反射也有一定的距离。Swift的反射机制是基于一个叫 Mirror 的 struct 来实现的,其内部有如下属性和方法:

// 对象的子节点。
let children: Children   
// 对象的展示风格
displayStyle: Mirror.DisplayStyle?
// 对象的类型
let subjectType: Any.Type   
// 对象父类的 mirror
func superclassMirror() -> Mirror?   

Swift反射实用样例:
先创建类User

    var name: String?
    var nickname:String?
    var age:Int = 0
    var emails:[String]?
}

接着创建一个User对象,通过反射获取这个对象的信息:

let user1 = User()
user1.name = "hangge"
user1.age = 100
user1.nickname = "xiaoming"
user1.emails = ["hangge@hangge.com","system@hangge.com"]
        
let mirror = Mirror(reflecting: user1)
        
print("对象类型:\(mirror.subjectType)")
print("对象子元素个数:\(mirror.children.count)")
        
print("--- 对象子元素的属性名和属性值分别如下 ---")
for case let (label?, value) in mirror.children {
    let mi = Mirror(reflecting: value)
    if mi.displayStyle != Mirror.DisplayStyle.optional {
       print("属性:\(label)  值:\(value)")
    } else {
       let (_, some) = mi.children.first!
       print("属性:\(label)  值:\(some)")
    }
}
对象类型:User
对象子元素个数:4
--- 对象子元素的属性名和属性值分别如下 ---
属性:name  值:hangge
属性:nickname  值:xiaoming
属性:age  值:100
属性:emails  值:["hangge@hangge.com", "system@hangge.com"]
image

相关文章

  • Swift中的反射Mirror

    Swift中的反射Mirror [TOC] 前言 Mirror是Swift中的反射机制,对于C#和Java开发人员...

  • 源码

    反射 Swift通过Mirror类型来提供简单的反射功能

  • Swift - 反射Mirror

    在Swift中并不提倡使用Runtime,而是像其他语言一样使用反射(Reflect)。当然,目前Swift中的反...

  • Swift反射机制Mirror

    反射就是可以动态获取类型、成员信息,在运行时可以调用方法、属性等行为的特性。对于一个纯 Swift 类来说,并不支...

  • swift-Mirror反射

    打印结果: Mirror 可以动态获取类型、成员变量,在运行时可以调用方法、属性等行为的特性. Mirror.sw...

  • Swift-进阶:Mirror源码解析

    本文主要是分析Mirror的底层实现,以及根据Mirror底层原理仿写其结构的实现 在Swift-进阶:反射Mir...

  • Swift底层探索:反射

    反射Mirror 反射就是可以动态获取类型、成员信息,在运行时可以调用方法、属性等行为的特性。对于纯Swift类来...

  • Swift-06:反射Mirror

    本文主要介绍Mirror的使用以及使用Mirror进行JSON解析的错误处理 反射Mirror 反射:是指可以动态...

  • 反射 Mirror | Swift 动态性

    Mirror是Swift中的反射机制,反射就是可以动态的获取类型以及成员信息,同时也可以在运行时动态的调用方法和属...

  • Swift-进阶:反射Mirror & 错误处理

    本文主要介绍Mirror的使用以及使用Mirror进行JSON解析的错误处理 反射Mirror 反射:是指可以动态...

网友评论

    本文标题:Swift - 反射Mirror

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