Die Funktion enumerateLines
des Swift-Typs String
ist wie folgt deklariert:
enumerateLines(body: (line: String, inout stop: Bool) -> ())
Meines Verständnisses nach bedeutet diese Deklaration: "enumerateLines ist eine Funktion, die einen Closure namens body
erwartet, der zwei Variablen, line
und stop
, übergeben bekommt und void zurückgibt."
Laut dem Swift Programming Sprache Buch, sollte es also möglich sein, enumerateLines
in einer kurzen Form mit einem abschließenden Closure aufzurufen, wie folgt:
var someString = "Hello"
someString.enumerateLines()
{
// Hier etwas mit der Zeile machen
}
..doch das führt zu einem Compilerfehler:
Die Tupeltypen '(line: String, inout stop: Bool)' und '()' haben eine unterschiedliche Anzahl von Elementen (2 vs. 0)
Also versuche ich, die Argumente explizit anzugeben und das abschließende Closure zu entfernen:
addressString.enumerateLines((line: String, stop: Bool)
{
// Hier etwas mit der Zeile machen
})
...doch das führt zu dem Fehler:
'(() -> () -> $T2) -> $T3' ist nicht identisch mit '(line: String.Type, stop: Bool.Type)'
Kurz gesagt, keine Syntax, die ich ausprobiert habe, führte zu einer erfolgreichen Kompilierung.
Könnte mir jemand den Fehler in meinem Verständnis zeigen und eine Syntax bereitstellen, die funktioniert, bitte? Ich verwende Xcode 6 Beta 4.