Mirror

Mirror 是 Swift 提供的一个用于反射的类,我们介绍一下 他的简单用法。

struct Point {
    let x: Int
    let y: Int
    let z: Int
}

let p = Point(x: 1, y: 2, z: 3)
let mirror = Mirror(reflecting: p)
for child in mirror.children {
    print("label:\(child.label)")
    print("value:\(child.value)")
}

// 输出
// label:Optional("x")
// value:1
// label:Optional("y")
// value:2
// label:Optional("z")
// value:3

Mirror 可以轻松将一个对象的属性和值反射出来。

但是 Swift 由于弱化了反射的功能,它无法赋值,你可以读,但是你不能写,即使写,也不是原来的那个对象了,因为它会给你个 copy 版本。 这也就是为什么 SwiftJSON 的库要用操作内存偏移来给对象赋值,因为没办法通过反射赋值。

最后更新于