lazy variable從iOS 7.0開始加入

當你需要的時候才建立複雜的object在iOS中是非常普遍的,Swift有一個適合運用在即時複雜運算的機制 – lazyvariable,

這些variable會利用function來建立,只有在被呼叫時才會跑function裡的內容,

整體來說可以節省處理的時間。

例子:

比方說一個費氏數列會寫成:

試著在playground中跑這段code會發現它很慢,假設今天我們要在一個叫Person的struct中包含age和fibonacciAge的property,

但我們希望fibonacciAge直到真的需要用到時才做計算,就可以寫成:

這段程式碼有幾個重點:

– lazy property只能被指定為lazy var而無法為lazy let,lazy properties永遠都是variables

– 因為實際的值是經過計算來建立的,所以在最上方要先宣告資料型式,這裡只的是Int這個property

– 在function裡面需要用self,如果使用class而非structure的話,也要宣告為[unowned self]在function裡面避免retain cycle

– 在結尾處加上(),因為事實上這是在呼叫我們創建的function

當上面的程式碼都準備好之後,可以這樣來使用:

今天如果我們創建了1000個singer,但是都沒有使用到fibonacciOfAge的話,相較於沒用lazy var程式會執行的更快速。

參考來源:What are lazy variables?