Menu
Coddy logo textTech

Closure-Grundlagen

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

Ein Closure ist ein eigenständiger Codeblock, den Sie weitergeben und später aufrufen können. Die vollständige Syntax gibt Parameter- und Rückgabetypen an:

let double = { (n: Int) -> Int in
    return n * 2
}
print(double(5))                  // 10

Swift kann die Typen ableiten, wenn der Kontext klar ist, daher schreibt man selten die Langform. Innerhalb von map, filter usw. ist die kürzere Kurzschreibweise die Norm:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }    // am kürzesten, $0 ist das erste Argument

Closures sind Werte; man kann sie in Variablen speichern, sie von Funktionen zurückgeben und sie als Argumente übergeben. Das ist der eigentliche Grund, warum map funktioniert.

challenge icon

Aufgabe

Einfach

Lies zwei Zeilen Eingabe ein:

  1. Eine Ganzzahl x
  2. Eine durch Kommas getrennte Liste von Ganzzahlen

Definiere drei Closures, jeweils vom Typ (Int) -> Int:

  • addX addiert x zu seinem Argument
  • square gibt das Quadrat des Arguments zurück
  • negate gibt das negierte Argument zurück

Wende jede Closure mit map auf jedes Element der Liste an. Gib drei Zeilen aus, eine pro Closure, wobei die Ergebnisse durch , getrennt sind:

addX: ...
square: ...
negate: ...

Für die Eingabe 10 in Zeile 1 und 1,2,3 in Zeile 2 lautet die Ausgabe:

addX: 11,12,13
square: 1,4,9
negate: -1,-2,-3

Spickzettel

Ein Closure ist ein eigenständiger Codeblock, der gespeichert und weitergegeben werden kann. Vollständige Syntax:

let double = { (n: Int) -> Int in
    return n * 2
}

Closures können in Variablen gespeichert und als Argumente übergeben werden (z. B. an map). Swift leitet Typen im Kontext ab, was Kurzschreibweisen ermöglicht:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }  // $0 ist das erste Argument

Probier es selbst

let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: definiere drei (Int) -> Int Closures und mappe nums durch jedes
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