镜像的基本用法

创建要成为 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: Stringvalue: 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 测试