2016-09-21 9 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 
}() 

ist diese Variable oder Funktion, warum gibt es einen Wert zurück? Warum nennen wir es? es funktioniert nicht ohne parenthesis, warum?Wie funktioniert ein Block mit geschweiften Klammern und Klammern?

Antwort

7

Dies ist ein Verschluss erstellt und an der gleichen Stelle verwendet. Sie verwenden es zur Initialisierung, wenn Sie nicht alles in einen einzelnen Ausdruck einfügen können. Diese Funktion ist hilfreich, wenn schreibgeschützte Felder (let, im Gegensatz zu var) erstellt werden.

Im obigen Fall erstellt der Code eine Schaltfläche und führt dann eine zusätzliche Konfiguration durch, bevor das Ergebnis zurückgegeben wird. Dies ist eine gute Möglichkeit, Code von init in Code-Blöcke in der Nähe des Initialisierungsortes zu verschieben.

Eine Möglichkeit, zu visualisieren, was los ist eine benannten Funktion zu denken, die die gleiche Sache tut:

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 
} 

Jetzt können Sie es in einem Initialisierer verwenden

let loginRegisterButton:UIButton = makeWhiteButton() 

Der Code aus post macht das gleiche mit einer anonymen "closure" -Funktion. Die Klammern nach dem Closure-Block sind aus demselben Grund wie die Klammern nach makeWhiteButton oben.

+0

danke, das macht Sinn – Ninja13

+0

@ Ninja13 Sie sind herzlich willkommen! Wenn Sie keine weitere Hilfe benötigen, akzeptieren Sie die Antwort, indem Sie auf das graue Häkchen daneben klicken. Dadurch würden andere wissen, dass Ihr Problem gelöst ist, und Sie erhalten ein neues Abzeichen auf Stack Overflow. – dasblinkenlight

Verwandte Themen