我明白斯威夫特卡倫特,靜態瓦爾隱含懶:https://stackoverflow.com/a/34667272/1672161在斯威夫特,爲什麼賦值給一個靜態變量也援引其吸氣劑
但我不是,爲什麼出現這種情況清楚:
protocol HatType {}
class Hat: HatType {
init() { print("real hat") }
}
class MockHat: HatType {
init() { print("mock hat") }
}
struct HatInjector {
static var hat: HatType = Hat()
}
HatInjector.hat = MockHat()
// Output:
// real hat
// mock hat
我所看到的是,靜態變量的賦值也在某種意義上調用了getter。這對我來說並不直觀。這裏發生了什麼?爲什麼這項任務只發生?
這是一個班級項目嗎?其他人剛剛發佈http://stackoverflow.com/questions/43373932/setting-lazy-static-variable-first-initializes-then-幾分鐘前提出同樣的問題。 – rmaddy
哈!一定是巧合! @rmaddy。結束,因爲那個人有更多的討論,所以更好地繼續那一個 – guptron
我個人不認爲這是重複的 - 鏈接問答並沒有詢問行爲的原因(儘管我同意它不是很好解釋和解決方案跨越不同的問題)。但我不認爲傻瓜標記是最好的解決方案 - 我建議我們重新開放。 – Hamish