我閱讀一個開原始碼的過程中,常常發現有這樣的結構:
var textLabel:UILabel = {
let label = UILabel()
label.backgroundColor = .red
return label
}()複製程式碼
功能能夠編譯,能夠執行,因此語法當然是對的,直接望文生義也知道程式碼要幹啥,只是,這是什麼語法?
既然我們關心的是語法結構,那麼簡化下就是這樣樣子,對我們要研究的問題並無影響,但是更加簡單:
var a = {return 42}複製程式碼
這樣,我們可以列印來驗證它是啥?
var a = {return 42}
print(a)//(Function)
print(a())//42複製程式碼
結果列印出來是
(Function)
42複製程式碼
這說明{}
就是定義了一個閉包,並且此閉包是沒有引數的。雖然,閉包經常用於函式引數,但是直接呼叫也無不可。加上()
就會指定這個函式。這塊函式的定義和呼叫真是超級靈活,感覺和JavaScript的函式式一樣的了。