Auf Swift 3:
func defaultParameterBefore(_ x: Int = 1, y: Int) {}
Aufruf
defaultParameterBefore(2)
wird dieser Fehler erhöhen
error: missing argument for parameter 'y' in call
Die einzige Ausnahme ist:
- Es gibt einen Parameter vor dem Standardparameter ist;
- und der Parameter nach dem Standardparameter ist ein Abschluss;
- und der Abschlussparameter ist der letzte Parameter;
- und Aufruf über Hinter Schließung
Zum Beispiel:
func defaultParameterBetween(_ x: Int, _ y: Bool = true, _ z: String) {
if y {
print(x)
} else
z()
}
}
// error: missing argument for parameter #3 in call
// defaultParameterWithTrailingClosure(1, { print(0) }
// Trailing closure does work, though.
func defaultParameterWithTrailingClosure(_ x: Int, y: Bool = true,
_ z:() -> Void) {
if y {
print(x)
} else {
z()
}
}
defaultParameterWithTrailingClosure(1) { print(0) }
rasche Version: DEVELOPMENT-SNAPSHOT-2016-04-12
Während diese Antwort technisch korrekt ist und Sie dies in Swift so machen können, ist es sehr verwirrend und sollte vermieden werden. Das Refactoring einer Funktion, um Standardparameter am Ende zu haben, ist nicht so viel Arbeit. Selbst in diesem einfachen Fall ist nicht ganz klar, was der Aufruf von "f (1)" bedeutet. [@ Connors Antwort] (http://stackoverflow.com/a/24102938/133166) sollte der akzeptierte sein. –
@Rafael Ich habe nicht gesagt, dass dies die beste Praxis ist; Ich habe die Frage richtig beantwortet. Daher sollte dies die akzeptierte Antwort sein. – nathan
@Rafael Swift 3 'f (1)' verursacht einen Fehler. – weakish