2016-02-06 70 views
2

我分析分析一些第三方的代碼,並有看起來像這樣的「偷懶」 var語句,我想了解一下括號內的「計算的財產」大括號後做:惰性var定義之後括號做了什麼?

lazy var defaults:NSUserDefaults = { 
    return .standardUserDefaults() 
}() 

「return .standardUserDefaults()」正在返回NSUserDefaults實例對象,那麼爲什麼要在右大括號後面添加一個()?

謝謝

回答

3

這意味着它的一個塊被執行的第一次默認值被訪問。如果沒有(),則表示缺省值是() -> NSUserDefaults類型變量的塊類型。當你添加()這意味着它只是NSUserDefaults這是由訪問時執行的塊返回的。

+0

謝謝,是的,這是有道理的。令我困惑的是,花括號使它看起來像沒有得到的「計算屬性」。編譯器如何知道它不是一個計算屬性,而是一個塊/閉包? – malena

+2

塊末尾的()表示塊調用,而不是塊本身。 –

+1

我還沒有完全理解它 - 它是封閉的嗎?有沒有詳細解釋呢?這個解釋(似乎確定)必須在Apple的快速文檔中......我可以在哪裏找到它?我還想知道在一本好的Swift書中能找到什麼?我搜查了蘋果書和其他書籍,但沒有發現任何東西 – mlev