2015-07-03 108 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