假设我有类似的东西
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?
答案 0 :(得分:0)
MirorType的功能非常有限。除此之外,它已被Xcode 7 beta 4中的其他功能所取代。
您的情况是,该物业尚未使用。所以它实际上仍然是零。使其不为零的唯一方法是通过获取它的价值来访问该属性。不幸的是,在Swift中你不能通过执行.valueForKey(&#34; propertyName&#34;)
来做到这一点。如果您正在寻找一个试图尽可能多地从Swift中获取的反射库,那么请查看EVReflection