2015-07-03 109 views
0

比方说,我有这样的事情延迟加载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?

回答

0

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

您的情况中的一点是该属性尚未使用。所以它实际上仍然是零。让它不成立的唯一方法是通过获取它的价值来访问该属性。不幸的是斯威夫特,你不能这样做,通过执行.valueForKey(“PROPERTYNAME”)

如果您正在寻找正在试图获得尽可能多的出斯威夫特的反射库,然后看看EVReflection