延迟加载 MirrorType
Lazy load 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
初始化它,或者我是在等待某人写第一个-class 反射 api Swift?
MirorType 的功能非常有限。除此之外,它已被 Xcode 7 beta 4 中的其他功能所取代。
你的问题是 属性 还没有被使用过。所以它实际上仍然是零。使其不为 nil 的唯一方法是通过获取 属性 的值来访问它。不幸的是,在 Swift 中,您不能通过执行 .valueForKey("propertyName")
来做到这一点
如果您正在寻找试图尽可能多地利用 Swift 的反射库,请查看 EVReflection
假设我有这样的东西
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
初始化它,或者我是在等待某人写第一个-class 反射 api Swift?
MirorType 的功能非常有限。除此之外,它已被 Xcode 7 beta 4 中的其他功能所取代。
你的问题是 属性 还没有被使用过。所以它实际上仍然是零。使其不为 nil 的唯一方法是通过获取 属性 的值来访问它。不幸的是,在 Swift 中,您不能通过执行 .valueForKey("propertyName")
来做到这一点如果您正在寻找试图尽可能多地利用 Swift 的反射库,请查看 EVReflection