2016-09-21 108 views
6
let loginRegisterButton:UIButton = { 
    let button = UIButton(type: .system) 
    button.backgroundColor = .white 
    button.setTitle("Register", for: .normal) 
    button.translatesAutoresizingMaskIntoConstraints = false 
    button.setTitleColor(.white, for: .normal) 
    return button 
}() 

是這個變量或函數,它爲什麼返回值?我們爲什麼稱它?沒有parenthesis,這是行不通的,爲什麼?帶有大括號和圓括號的塊如何工作?

回答

7

這是一個關閉創建和使用在同一個地方。如果不能將所有內容放在單個表達式中,則可以使用它進行初始化。創建只讀(let,而不是var)字段時,此功能很有用。

在上面的例子中,代碼創建一個按鈕,然後在返回結果之前對其執行附加配置。這是將代碼從init移動到靠近初始化位置的代碼塊的好方法。想象這是怎麼回事

的方法之一是想命名的函數,做同樣的事情:

func makeWhiteButton() -> UIButton { 
    let button = UIButton(type: .system) 
    button.backgroundColor = UIColor.White 
    button.setTitle("Register", for: .normal) 
    button.translatesAutoresizingMaskIntoConstraints = false 
    button.setTitleColor(.white, for: .normal) 
    return button 
} 

現在你可以在初始化

let loginRegisterButton:UIButton = makeWhiteButton() 

從代碼中使用它你post使用匿名「閉包」功能做同樣的事情。關閉塊後的括號出現在上面的makeWhiteButton後面的括號中。

+0

謝謝,有道理 – Ninja13

+0

@忍者13歡迎您!如果您不需要進一步的幫助,請點擊旁邊的灰色複選標記,考慮接受答案。這會讓其他人知道你的問題已經解決,並在Stack Overflow上爲你贏得新的徽章。 – dasblinkenlight