Swift iOS : 閉包的一個應用

RecoReco發表於2017-08-14

我閱讀一個開原始碼的過程中,常常發現有這樣的結構:

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的函式式一樣的了。

相關文章