2016-08-05 5 views
2

Ich arbeite durch ein Tutorial für Anfänger auf Swift, die 2. in Swift geschriebenWas sind die neuen "for", "at", "in" Schlüsselwörter in Swift3 Funktionsdeklarationen?

Es enthält Code wie (beliebiges Beispiel)

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 

Das in Swift 3 geändert hat (ich verwende XCode 8 Beta) und die IDE helfend wandelt diese in das neue (schön) Notation:

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) { 

Was mich verwirrt ist hier die "für" in "für segue:". Ich verstehe, warum es da ist, aber was für ein Element ist es syntaktisch? Ist der Parameter for, for segue oder segue?

Ist es bloße Dekoration - ein Element ohne Bedeutung, um dem Entwickler zu helfen, den Kontext zu verstehen? Tut es etwas anderes? Hat das Konzept einen Namen? Kann ich es in meinen eigenen Methoden verwenden?

Ich sehe das gleiche passiert mit "in" und "at".

+0

Syntaxfehler? sollte forSegue sein :, Parameter label –

+0

@ShadowOf nein, es scheint der neue zu sein [Swift 3 Way] (https://www.hackingwithswift.com/swift3) –

+0

@El bekomme ich das, aber was ist es syntaktisch? Wird in der Methode der Parameter 'for segue' oder' segue' genannt? Wenn es "segue" ist, muss das 'for' irgendwie definiert werden. –

Antwort

7

Die Syntax können Sie Argumente zweimal beschriften - einmal für die Verwendung innerhalb der Funktion (der Parametername) und einmal für den Einsatz, wenn (die Argument Label) aufrufen. Standardmäßig werden diese beiden gleich sein (wie bei sender in Ihrem Beispiel), aber sie unterscheiden sich, wenn es eine Funktion besser lesbar an der Aufrufstelle macht:

prepare(for: aSegue, sender: something) 

ist lesbarer-as-a-Satz als:

prepare(segue: aSegue, sender: something) 

Welche klingt wie Sie die segue sich vorbereiten, nicht für die segue vorbereitet.

for wäre ein schrecklicher Name intern in der Funktion zu verwenden, um auf den Abschnitt verweisen, so dass Sie einen anderen verwenden können, wenn Sie benötigen.

Die Idee ist, die manchmal widersprüchlichen Ziele der Lesbarkeit an der Call-Site und sinnvolle Benennung in der Implementierung zu erfüllen.

Wenn Sie eine Funktion definieren, wenn Sie separate Argument Etiketten und Parameternamen verwenden wollen, können Sie das Argument Etikett zuerst angeben, und den Parameternamen zweite:

func sayHello(to name: String) { 
    print("Hello " + name) 
} 

sayHello(to: "Pekka") 

to hat nur Relevanz, wenn die Funktion aufrufen . name wird innerhalb der Funktion verwendet.

Verwandte Themen