0Pricing
Swift Academy · Lektion

Muster zur Typlöschung (AnySequence/AnyIterator)

Verwenden Sie AnySequence und AnyIterator , um konkrete Sequence-/Iterator-Typen zu löschen, sodass APIs „eine Sequence von T“ zurückgeben können, ohne die Implementierung offenzulegen.

Muster zur Typlöschung (AnySequence/AnyIterator) ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Warum Type Erasure?

Type Erasure verbirgt konkrete Typen hinter einem stabilen Wrapper. Mit AnySequence / AnyIterator können Sie „eine Sequenz von Elementen“ zurückgeben, ohne die interne Struktur offenzulegen.

Die Einschränkung

Sequence besitzt einen zugehörigen Typ (Element), daher kann das reine Protokoll nicht als konkreter Werttyp verwendet werden. Wir benötigen einen Wrapper.

// Goal: return "some Sequence<Int>"
// This won't compile as a stored value type:
// let s: Sequence = [1,2,3]   // Protocol with associated types
// Instead, erase the type to AnySequence<Int>.

AnySequence-Wrapper

AnySequence umschließt jede konkrete Sequenz (Array, Set, benutzerdefiniert) und stellt einen einheitlichen Typ wie AnySequence<Int> bereit.

// Build an AnySequence<Int> from an Array
let a = [1, 2, 3]
let seq1: AnySequence<Int> = AnySequence(a)
// Consume like any sequence
for x in seq1 { print(x, terminator: " ") }
print("")

AnyIterator-Wrapper

AnyIterator umschließt eine Closure, die Elemente erzeugt. Verpacken Sie ihn in AnySequence, um eine vollständige Sequenz bereitzustellen.

// Create an AnyIterator<Int> by hand
var i = 0
let it = AnyIterator<Int> {
    // Return next number or nil to stop
    guard i < 3 else { return nil }
    defer { i += 1 }
    return i
}
let seq2 = AnySequence(it)
for x in seq2 { print(x, terminator: " ") }  // 0 1 2
print("")

Einheitlicher Rückgabetyp

Type Erasure ermöglicht es einer Funktion, unter einem einzigen stabilen Rückgabetyp (AnySequence<Int>) unterschiedliche Implementierungen zurückzugeben.

// Return a sequence of Int without exposing concrete type
func numbers(flag: Bool) -> AnySequence<Int> {
    if flag {
        // Array-based
        return AnySequence([10, 20, 30])
    } else {
        // Lazy generated with AnyIterator
        var n = 1
        let it = AnyIterator<Int> {
            guard n <= 3 else { return nil }
            defer { n += 1 }
            return n * 100
        }
        return AnySequence(it)
    }
}

for x in numbers(flag: true)  { print(x, terminator: " ") }  // 10 20 30
print("")
for x in numbers(flag: false) { print(x, terminator: " ") }  // 100 200 300
print("")

Wann Sie es verwenden

Verwenden Sie Type Erasure, wenn:

  • Sie Implementierungsdetails von Sequences/Iteratoren verbergen möchten.
  • APIs unabhängig von internen Verzweigungen immer denselben Typ zurückgeben müssen.
  • Generics an API-Grenzen zu stark nach außen sichtbar werden.

Hinweise: Bevorzugen Sie innerhalb von Modulen Generics für bessere Performance und Klarheit; verwenden Sie an Grenzen bei Bedarf AnySequence/AnyIterator.

Zweck von AnySequence

Kurztest: Was bringt Ihnen AnySequence<T>?

Zusammenfassung

Zusammenfassung: Umhüllen Sie konkrete Sequences/Iteratoren mit AnySequence / AnyIterator, um Typen zu löschen und aus flexiblen APIs „eine Sequenz von T“ zurückzugeben.

Häufig gestellte Fragen

Ist die Lektion „Muster zur Typlöschung (AnySequence/AnyIterator)“ kostenlos?

Ja — der vollständige Text von „Muster zur Typlöschung (AnySequence/AnyIterator)“ 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 „Muster zur Typlöschung (AnySequence/AnyIterator)“?

Verwenden Sie AnySequence und AnyIterator , um konkrete Sequence-/Iterator-Typen zu löschen, sodass APIs „eine Sequence von T“ zurückgeben können, ohne die Implementierung offenzulegen. 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 2 von 3.

Wie lange dauert die Lektion „Muster zur Typlöschung (AnySequence/AnyIterator)“?

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. associatedtype und generische Protokolle
  2. Muster zur Typlöschung (AnySequence/AnyIterator)
  3. Wann Existenzialtypen (any P) statt Generics verwenden
← Zurück zu Swift Academy