Menu
Coddy logo textTech

Nachgestellte Closures

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 39 von 56.

Wenn eine Closure das letzte Argument einer Funktion ist, kannst du sie außerhalb der Klammern schreiben. Dies ist die Form der trailing-closure, und so liest sich Swift-Code ganz natürlich.

let nums = [1, 2, 3]
// Standardform
let a = nums.map({ $0 * 2 })
// Trailing-Closure-Form
let b = nums.map { $0 * 2 }

Wenn die Closure das einzige Argument ist, verschwinden auch die Klammern. Deshalb liest sich alles, was Sie bisher gesehen haben, wie eine benutzerdefinierte Kontrollstruktur.

Du kannst deine eigenen Funktionen schreiben, die Closures auf die gleiche Weise entgegennehmen:

func repeatN(_ n: Int, action: () -> Void) {
    for _ in 0..<n {
        action()
    }
}
repeatN(3) {
    print("hi")
}

Die Form mit nachgestelltem Closure lässt repeatN(3) { ... } wie eine integrierte Schleife wirken. Genau darum geht es: Kontrollstrukturen, die du selbst erstellst, sehen genauso aus wie die aus der Standardbibliothek.

challenge icon

Aufgabe

Einfach

Definiere eine Funktion collect, die:

  • eine Ganzzahl n und eine Closure builder: (Int) -> String entgegennimmt
  • builder für jedes i von 1 bis einschließlich n aufruft und das Array der resultierenden Zeichenfolgen zurückgibt

Lies eine Ganzzahl von stdin ein, rufe collect mit dieser Ganzzahl und einer nachgestellten Closure auf, die für jeden Wert "i=<i>" erzeugt, und gib das verbundene Ergebnis mit , aus.

Für die Eingabe 4 lautet die Ausgabe i=1,i=2,i=3,i=4.

Probier es selbst

let n = Int(readLine()!)!

// TODO: func collect(_ n:Int, builder:(Int)->String) -> [String]
// dann `collect(n) { ... }` aufrufen und mit "," verbunden ausgeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss

Übe selbstständig: Swift-Playground