延迟加载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中的其他功能也取代了它。

在您的案例中,关键是该属性尚未使用。所以实际上还是零。使其不为零的唯一方法是通过获取属性的值来访问该属性。不幸的是,在Swift中,执行.valueForKey("propertyName"(无法做到这一点

如果你正在寻找一个反射库,它试图尽可能多地利用Swift,那么看看EVReflection

相关内容

  • 没有找到相关文章

最新更新