2016-09-23 81 views
2

我期待在這個斯威夫特代碼:這個花括號塊在var聲明後做了什麼?

var modelController: ModelController { 
    if _modelController == nil { 
     _modelController = ModelController() 
    } 
    return _modelController! 
} 

var _modelController: ModelController? = nil 

我感興趣的是第一行:它的聲明名爲ModelControllermodelController變量,其次是一些代碼大括號包圍,我認爲這是所謂的在斯威夫特封閉。

這個封閉是做什麼的?何時執行?這種模式叫什麼?我正在使用Swift 3.

+3

在Swift參考中查找「計算屬性」... –

+0

剛剛發現它,謝謝@MartinR。我寫了一個答案。 – Flimm

回答

3

這叫做computed property。你在這裏看到的是一個只讀的計算屬性。

每次訪問屬性(self.modelController在這種情況下),閉包運行,返回將用於該屬性的值。

在給出的例子中,代碼檢查是否設置了另一個變量_modelController,如果沒有設置,則返回該值。這是第一次訪問對象時延遲加載對象的一種方式。

+3

Swift也有'懶'屬性,所以你實際上很少使用這種模式(除非你直接翻譯Objective-C代碼)。 –

+0

@MartinR這很吸引人。我引用的代碼是從Xcode開始的代碼,我很驚訝它不會使用慣用的Swift方式。 – Flimm

+1

你是如何獲得該代碼的?哪個Xcode版本? –

相關問題