假设我有这样的
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
初始化它,或者我一直在等待有人为Swift编写一流的反射api?
在您的案例中,关键是该属性尚未使用。所以实际上还是零。使其不为零的唯一方法是通过获取属性的值来访问该属性。不幸的是,在Swift中,执行.valueForKey("propertyName"(无法做到这一点
如果你正在寻找一个反射库,它试图尽可能多地利用Swift,那么看看EVReflection