Menu
Coddy logo textTech

Closures zurückgeben

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

Sie haben gesehen, wie makeCounter eine Closure zurückgibt. Derselbe Trick ermöglicht es Ihnen, konfigurierbares Verhalten zu erstellen: Parameter einmal entgegennehmen und eine Funktion zurückerhalten, die diese mehrmals verwendet.

func multiplier(_ k: Int) -> (Int) -> Int {
    return { n in n * k }
}

let triple = multiplier(3)
let tenfold = multiplier(10)
print(triple(4))                  // 12
print(tenfold(4))                 // 40

Die zurückgegebene Closure erfasst k, sodass jeder multiplier(...)-Aufruf eine brandneue Closure mit ihrem eigenen k erzeugt.

Dieses Muster ist der Kern von „Strategy“-Code in Swift: Schreiben Sie eine Funktion, die eine Konfiguration entgegennimmt und ein Closure zurückgibt, und übergeben Sie das Closure dann an map, filter, sorted(by:) oder an jede andere Stelle, an der ein Wert in Form einer Funktion erwartet wird.

challenge icon

Aufgabe

Mittel

Erstelle zwei Closure-Fabriken:

  • greaterThan(_ k: Int) -> (Int) -> Bool: gibt ein Prädikat zurück, das true ist, wenn sein Argument strikt größer als k ist
  • scaleBy(_ k: Int) -> (Int) -> Int: gibt eine Funktion zurück, die ihr Argument mit k multipliziert

Lies drei Zeilen ein:

  1. Eine Ganzzahl threshold
  2. Eine Ganzzahl scale
  3. Eine durch Kommas getrennte Liste von Ganzzahlen, die nums

Gib drei Zeilen aus:

  1. Die Zahlen oberhalb des Schwellenwerts (filtere mit der Closure aus greaterThan), verbunden mit ,
  2. Dieselben Zahlen, skaliert (mappe mit scaleBy), verbunden mit ,
  3. Wie viele den Filter passiert haben

Für die Eingabe 5 / 3 / 2,7,3,8,9 lautet die Ausgabe:

7,8,9
21,24,27
3

Probier es selbst

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

// TODO: greaterThan, scaleBy; filtern, dann mappen; Ergebnis zusammengefügt ausgeben und Anzahl zählen
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