延迟加载MirrorType
问题描述:
比方说,我有这样的事情延迟加载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
初始化它,或者我坚持等待某人为Swift编写一流的反射API?
答
MirorType的功能非常有限。除此之外,它被Xcode 7 beta 4中的其他功能所取代。
您的情况中的一点是该属性尚未使用。所以它实际上仍然是零。让它不成立的唯一方法是通过获取它的价值来访问该属性。不幸的是斯威夫特,你不能这样做,通过执行.valueForKey(“PROPERTYNAME”)
如果您正在寻找正在试图获得尽可能多的出斯威夫特的反射库,然后看看EVReflection