镜像的基本用法
创建要成为 Mirror 主题的类
class Project {
var title: String = ""
var id: Int = 0
var platform: String = ""
var version: Int = 0
var info: String?
}
创建一个实际上将成为镜像主题的实例。此外,你还可以向 Project 类的属性添加值。
let sampleProject = Project()
sampleProject.title = "MirrorMirror"
sampleProject.id = 199
sampleProject.platform = "iOS"
sampleProject.version = 2
sampleProject.info = "test app for Reflection"
下面的代码显示了 Mirror 实例的创建。镜子的子属性是 AnyForwardCollection<Child>
,其中 Child
是主题属性和值的 typealias 元组。Child
有一个 label: String
和 value: Any
。
let projectMirror = Mirror(reflecting: sampleProject)
let properties = projectMirror.children
print(properties.count) //5
print(properties.first?.label) //Optional("title")
print(properties.first!.value) //MirrorMirror
print()
for property in properties {
print("\(property.label!):\(property.value)")
}
在 Xcode 中的 Playground 或 Console 中输出 for for 循环。
title:MirrorMirror
id:199
platform:iOS
version:2
info:Optional("test app for Reflection")
在 Xcode 8 beta 2 上的 Playground 测试