Menu
Coddy logo textTech

Werte erfassen

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

Eine Closure merkt sich die Variablen, die bei ihrer Erstellung im Gültigkeitsbereich waren. Der Rumpf der Closure kann sie später lesen und sogar ändern, selbst nachdem die umgebende Funktion zurückgegeben wurde. Dies wird als Capturing bezeichnet.

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}

let next = makeCounter()
print(next())                    // 1
print(next())                    // 2
print(next())                    // 3

Jeder Aufruf von makeCounter gibt dir ein brandneues count, daher teilen sich zwei Zähler niemals ihren Zustand:

let a = makeCounter()
let b = makeCounter()
print(a())                       // 1
print(b())                       // 1
print(a())                       // 2

Das Erfassen macht Closures leistungsfähiger als einfache Funktionen: Sie führen ihren Zustand mit sich. Du wirst denselben Trick in JavaScript, Python und vielen anderen Sprachen sehen.

challenge icon

Aufgabe

Mittel

Erstelle eine kleine Zählerfabrik.

Definiere eine Funktion makeCounter(start: Int, step: Int), die einen Abschluss vom Typ () -> Int zurückgibt. Jeder Aufruf des Abschlusses gibt den nächsten Wert zurück: Der erste Aufruf gibt start zurück, der nächste start + step, der nächste start + 2*step und so weiter.

Lies drei Ganzzahlen aus der Eingabe ein: start, step und n. Erstelle einen Zähler mit start und step, rufe ihn dann n-mal auf und gib jedes Ergebnis in einer eigenen Zeile aus.

Für die Eingabe 5 / 3 / 4 lautet die Ausgabe:

5
8
11
14

Probier es selbst

let start = Int(readLine()!)!
let step = Int(readLine()!)!
let n = Int(readLine()!)!

// TODO: makeCounter(start:step:) -> () -> Int, das den laufenden Wert erfasst
// dann rufe es n-mal auf und gib jedes Ergebnis aus
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