Swift Swift中的反射

Swift的反射机制是基于一个叫 Mirror 的 struct 来实现的,其内部有如下属性和方法:

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

使用样例:

样例1:输出实体对象的类名,属性个数,以及所有属性的属性名和属性值。

首先定义一个用户类:

//用户类
class User {
    var name:String = ""  //姓名
    var nickname:String?  //昵称
    var age:Int?   //年龄
    var emails:[String]?  //邮件地址
}

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

//创建一个User实例对象
let user1 = User()
user1.name = "hangge"
user1.age = 100
user1.emails = ["[email protected]","[email protected]"]

//将user对象进行反射
let hMirror = Mirror(reflecting: user1)

print("对象类型:\(hMirror.subjectType)")
print("对象子元素个数:\(hMirror.children.count)")

print("--- 对象子元素的属性名和属性值分别如下 ---")
for case let (label?, value) in hMirror.children {
    print("属性:\(label)     值:\(value)")
}

控制台输出信息如下:

原文:http://www.hangge.com/blog/cache/detail_976.html

时间: 2024-10-07 21:09:12

Swift Swift中的反射的相关文章

Swift语言中的泛型编程 【Generic】【Part 1】

泛型  泛型编程让你可以编写更具扩展性.易重用的功能,代码使用时的类型取决于你所定义的业务需求.你可以编写避免重复的代码,目标更加清晰明确,风格抽象. 泛型是Swift语言的一项强大的特性,基本上所有的swift标准库都建立在泛型代码上.实际上,你在这本书的时候不知不觉地接触到泛型,它贯穿始终.例如Swift的数组和字典类型都是泛型集合.你可以创建用于存放整数值的数组,也创建数组存储字符串,其他所有能在Swift中创建的类型都可以创建到数组中.类似的,你可以创建字典来存储数值或其他指定的类型,毫

Swift编程语言中的方法引用(基于2.2版本)

由于Apple官方的<The Swift Programming Guide>对Swift编程语言中的方法引用介绍得不多,所以这里将更深入.详细地介绍Swift中的方法引用. Swift与Objective-C不同,由于Objective-C的方法都属于“消息”,因此直接用selector的消息签名即可表示一条确定的消息作为方法引用.而Swift的方法更类似于C++.Java中的方法,也就是说比Objective-C更静态,因此它不具有如此般灵活性. 另外,在Swift编程语言中,方法引用与C

Swift语言中的属性,方法,下标脚本以及继承

从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并不是太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于很好的应用Swift语言将会有比较大的帮助. 属性 存储属性 存储属性通常是那些可以通过直接赋值,或者直接访问成员能够获得的属性类型. 它有些要注意的地方: 若一个结构体被声明为常量,则子属性无法被修改了.在Objective-C中,我们总是无法修改结构体的子属性,但是swift却可以,不过这种情况是个例外,当你存储型属性是个结构体并且是个常量,那你就不要再

在 Swift 项目中实现侧滑菜单-利用 SWRevealViewController

你可以完全自己手动写一个侧滑菜单,但是现在在 GitHub 上面已经有很多免费的开源库了,如果不是有很特别的需求,大可不必新建一个轮子. 在这里我使用的这个第三方库名字叫做 SWRevealViewController,作者是 John Lluch.这个免费的类库提供了很方便快捷的方法去把侧滑菜单加入到你的 App 里面,而且它还提供了很多个性化的设置项.它是用 Objective-C 来写的,但是我们也可以很方便的在 Swift 项目中去使用它.你分分钟便可学会如何使用. 首先来看一下我们的

Swift 3 中的新特性

原文:What's New in Swift 3? 作者:Ben Morrow 译者:kmyhy Swift 3 将在下半年退出,对于 Swift 程序员来说,它带来了许多改变. 如果你没有密切关注 Swift Evolution 项目,那么在将代码迁移到 Swift 3 时,你可能不知道它到底有什么改变,以及它会对你的代码带来什么影响.那么你可能需要读一下这篇文章了. 通过本文,我将重点介绍 Swift 3 中的重大改变,这些改变对你的代码有深刻影响.让我们开始吧! 开始 目前,Swift 3

Swift编程语言中如何实现自定义类型的for-in循环(基于Swift 2.2)

我们在Swift编程语言中常常会用到for-in循环(在编程语言术语中又被称为for-each).此外,从Swift 2.2版本起,for循环将只支持for-in形式,而不支持for i = 0; i < n; i+=1 { }这种形式了,若要使用这种形式的话,只得用while或repeat-while来代替,或想办法转为for-in. 在Swift中,标准库已经定义了许多类型可直接支持for-in循环形式,比如Range.Array.Set.Dictionary等等.那么我们是否能自己定义一个

在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON

SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSONValue(dataFromNetworking) if let userName = json[0]["user"]["name"].string{   //Now you got your value } And don't worry about the Opti

?Swift语言中为外部参数设置默认值,可变参数,常量参数,变量参数,输入输出参数

引用自这里:Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 目录[-] 7.4.4  为外部参数设置默认值 7.4.5  可变参数 7.4.6  常量参数和变量参数 7.4.7  输入-输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和&qu

Swift语言中的集合类——字典 使用方法

字典 字典是一种存储相同类型多重数据的存储器.每个值(value)都关联独特的键(key),键作为字典中的这个值数据的标识符.和数组中的数据项不同,字典中的数据项并没有具体顺序.我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样. Swift 的字典使用时需要具体规定可以存储键和值类型.不同于 Objective-C 的NSDictionary和NSMutableDictionary 类可以使用任何类型的对象来作键和值并且不提供任何关于

Swift 项目中常用的第三方框架

Swift 项目中可能用到的第三方框架 字数1004 阅读4091 评论17 喜欢93 这里记录下swift开发中可能用的框架 , 最近浏览了不少,积累在这里,以后用的时候方便查阅.顺便推荐给大家! 这里的框架都是纯swift的 , 感谢开源 ,感谢大神们 . 下拉刷新 BreakOutToRefresh 一个下拉刷新打砖块的swift库 SDRefreshView 简单易用的上拉和下拉刷新 ZLSwiftRefresh - 下拉刷新/上拉加载更多,支持自定义动画,集成简单 GearRefres