0Pricing
Swift Academy · Lektion

Escaping vs. non-escaping, autoclosures

Verstehen Sie non-escaping-Closures (Standard) im Vergleich zu @escaping (gespeichert oder nach der Rückgabe verwendet) und verwenden Sie @autoclosure für übersichtlichere Aufrufstellen mit verzögerter Auswertung.

Escaping vs. non-escaping, autoclosures ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Überblick

Ziel: Verstehen Sie, wann eine Closure non-escaping (Standard) oder @escaping (gespeichert/asynchron) ist und wie @autoclosure Aufrufstellen übersichtlicher macht.

Non-escaping als Standard

Closure-Parameter sind standardmäßig non-escaping – sie werden aufgerufen, bevor die Funktion zurückkehrt, und niemals gespeichert.

// Non-escaping by default: used immediately inside the function.
func applyTwice(_ f: (Int) -> Int, to x: Int) -> Int {
    return f(f(x))   // called synchronously; not stored
}
let doubled = applyTwice({ $0 * 2 }, to: 3)
print(doubled)  // 12

Escaping-Closure

Kennzeichnen Sie den Parameter mit @escaping, wenn Sie die Closure speichern oder nach der Rückkehr ausführen, zum Beispiel bei Timern oder asynchroner Arbeit.

// Need @escaping when storing for later use:
var tasks: [() -> Void] = []

func addTask(_ work: @escaping () -> Void) {
    tasks.append(work)  // stored to run later
}

addTask { print("run later") }
tasks.forEach { $0() }

Asynchroner Completion-Handler

Asynchrone APIs verwenden typischerweise @escaping-Completion-Handler, die nach der Rückkehr der Funktion aufgerufen werden.

func fetchData(completion: @escaping (String) -> Void) {
    // simulate async: call completion in the future
    // (In real apps, use DispatchQueue or URLSession)
    completion("done")  // still escaping by contract (may be called later)
}
fetchData { result in print(result) }

Autoclosure

@autoclosure ermöglicht es Aufrufern, einen Ausdruck zu übergeben, anstatt eine Closure zu schreiben, und verbessert dadurch die Lesbarkeit.

// @autoclosure converts an expression into () -> Bool automatically.
func logIf(_ condition: @autoclosure () -> Bool) {
    if condition() { print("Condition is true") }
}

let x = 3
logIf(x > 1)       // no braces needed; expression is turned into a closure

Autoclosure + escaping

@autoclosure @escaping speichert den übergebenen Ausdruck, um ihn später auszuwerten – berücksichtigen Sie erfassten Zustand und den Zeitpunkt der Auswertung.

// You can combine @autoclosure with @escaping:
// (be careful: the expression is captured and evaluated later)
var checks: [() -> Bool] = []

func enqueueCheck(_ condition: @autoclosure @escaping () -> Bool) {
    checks.append(condition)   // stored to run later
}

var threshold = 10
enqueueCheck(threshold > 5)   // captures current variable by reference semantics
threshold = 3
print(checks.map { $0() })    // re-evaluates with updated threshold

Escaping-Regel

Kurzer Check: Wann ist @escaping erforderlich?

Zusammenfassung

Zusammenfassung: Closures sind standardmäßig non-escaping. Verwenden Sie @escaping, wenn sie gespeichert oder später aufgerufen werden. Verwenden Sie @autoclosure für übersichtlichere Aufrufstellen und kombinieren Sie es vorsichtig mit @escaping.

Häufig gestellte Fragen

Ist die Lektion „Escaping vs. non-escaping, autoclosures“ kostenlos?

Ja — der vollständige Text von „Escaping vs. non-escaping, autoclosures“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Escaping vs. non-escaping, autoclosures“?

Verstehen Sie non-escaping-Closures (Standard) im Vergleich zu @escaping (gespeichert oder nach der Rückgabe verwendet) und verwenden Sie @autoclosure für übersichtlichere Aufrufstellen mit verzögert… Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 3.

Wie lange dauert die Lektion „Escaping vs. non-escaping, autoclosures“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von Closures und Capturing
  2. Capture-Listen – weak/unowned und Werterfassung
  3. Escaping vs. non-escaping, autoclosures
← Zurück zu Swift Academy