den folgenden Satz von Funktionen vor:Unterdrück Implizite Returns in Swift
func testFunc(someFunc: (Int[]) ->()) {
someFunc([1, 2, 3])
}
func someFunc<T>(arr : T[]) -> T[] {
return arr
}
func someOtherFunc<T>(arr : T[]) {
println(arr)
}
// case 1 - ERROR
testFunc() {
someFunc($0)
}
// case 2 - no error
testFunc() {
println("whatever")
someFunc($0)
}
// case 3 - no error
testFunc() {
someOtherFunc($0)
}
Es sieht aus wie in Fall 1, Swift versucht implizit, da die Funktion von der Schließung zurück someFunc()
einen Wert zurückgibt. Dies wird nur ausgeführt, wenn nur eine Zeile in der Closure vorhanden ist (Implizite Rückgabe von Closures für Einzelausdrücke). Aus diesem Grund funktioniert case 2. Dies geschieht nicht, wenn die Funktion wie in Fall 3 Void
ist, d. H. Sie gibt keinen Wert zurück.
Meine Frage ist, ob es eine Möglichkeit gibt, dieses Verhalten zu unterdrücken, so dass ich eine Funktion mit einem Rückgabewert als einzeiligen Ausdruck in einem Abschluss haben kann, der keinen Rückgabewert hat.
"someFunc ($ 0); return"? Was ist falsch mit zwei Zeilen – sanz
Das sieht aus wie ein Fehler. (@tony gibt es keinen Grund, warum Sie zusätzliche Zeilen für diesen Fall hinzufügen sollten.) Typ-Inferenz sollte die Tatsache abfangen, dass 'testFunc' eine Closure nimmt, die nichts' ->() 'zurückgibt und die automatische Rückgabe von der Einzelexpressions-Verschluss. Bitte melden Sie es an https://bugreport.apple.com/ –
Ein Fehler macht mehr Sinn ... Ich dachte, ich würde verrückt werden. Fehlerbericht eingereicht, danke! –