延迟加载 MirrorType

Lazy load MirrorType

假设我有这样的东西

struct A {
    lazy var b: String = { return "Hello" }()
}

如果我尝试反映结构 A 并通过其 MirrorType 访问 b 的值,如下所示:

var a = A()
var r = reflect(a)

for i in 0..r.count {
    let (n, m) = r[i]
    println("\(m.value)")
    var c = a.b
    println("\(m.value)")
}

我两次都在控制台中得到 nil。请注意,基础值类型是 Swift.Optional<Swift.String>,而变量名称有点令人困惑 b.storage。有没有一种方法可以使用反射访问延迟加载变量的基础值或从它的 MirrorType 初始化它,或者我是在等待某人写第一个-class 反射 api Swift?

MirorType 的功能非常有限。除此之外,它已被 Xcode 7 beta 4 中的其他功能所取代。

你的问题是 属性 还没有被使用过。所以它实际上仍然是零。使其不为 nil 的唯一方法是通过获取 属性 的值来访问它。不幸的是,在 Swift 中,您不能通过执行 .valueForKey("propertyName")

来做到这一点

如果您正在寻找试图尽可能多地利用 Swift 的反射库,请查看 EVReflection