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