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)) // 10Swift 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 ArgumentClosures 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.
Aufgabe
EinfachLies zwei Zeilen Eingabe ein:
- Eine Ganzzahl
x - Eine durch Kommas getrennte Liste von Ganzzahlen
Definiere drei Closures, jeweils vom Typ (Int) -> Int:
addXaddiertxzu seinem Argumentsquaregibt das Quadrat des Arguments zurücknegategibt 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,-3Spickzettel
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 ArgumentProbier 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken8Closures
Closure-GrundlagenTrailing ClosuresWerte erfassenClosures zurückgebenEigene Higher-OrderRückblick – Pipeline Builder