延迟加载MirrorType

时间:2015-07-03 22:07:55

标签: swift reflection lazy-loading

假设我有类似的东西

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?

1 个答案:

答案 0 :(得分:0)

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

您的情况是,该物业尚未使用。所以它实际上仍然是零。使其不为零的唯一方法是通过获取它的价值来访问该属性。不幸的是,在Swift中你不能通过执行.valueForKey(&#34; propertyName&#34;)

来做到这一点。

如果您正在寻找一个试图尽可能多地从Swift中获取的反射库,那么请查看EVReflection