0Pricing
Swift Academy · Lektion

Zwischen some, any und Generics wählen

Wählen Sie Generics für homogene statische Typisierung, some P zum Verbergen eines festen konkreten Typs und any P für heterogenen Polymorphismus.

Zwischen some, any und Generics wählen 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.

Wann wird was verwendet?

Faustregel:

  • Generics: derselbe konkrete Typ pro Aufruf; beste Prüfungen zur Compile-Zeit und beste Performance.
  • some P: verbirgt den konkreten Rückgabetyp, der pro Funktion festgelegt ist.
  • any P: mischt konforme Typen (heterogen), mit dynamischem Dispatch.

Generics: homogen

Generics eignen sich ideal für homogene Daten und Optimierung (statischer Dispatch, Inlining).

protocol Shape { func area() -> Double }

struct Circle: Shape { let r: Double; func area() -> Double { .pi * r * r } }
struct Square: Shape { let s: Double; func area() -> Double { s * s } }

// Generic: one concrete Shape type per call site (homogeneous)
func totalAreaGeneric<S: Sequence, T: Shape>(_ xs: S) -> Double where S.Element == T {
    xs.reduce(0) { $0 + $1.area() }
}
print(totalAreaGeneric([Circle(r:1), Circle(r:2)]))  // OK
// totalAreaGeneric([Circle(r:1), Square(s:2)])      // ❌ different types

Opak: verborgen, aber festgelegt

some P gibt einen festen, aber verborgenen Typ zurück. Ideal, wenn Sie Kapselung möchten, ohne statische Performance einzubüßen.

// Opaque factory hides the concrete type while guaranteeing Shape
func unitShape(flag: Bool) -> some Shape {
    // Must return the SAME underlying type on all paths; pick one.
    Circle(r: 1)
}
let s = unitShape(flag: true)
print(String(format: "%.2f", s.area()))  // 3.14

any P: heterogen

any P ermöglicht gemischte Typen in einer Collection oder Variable; Methoden werden über die Protokollschnittstelle dynamisch aufgelöst.

// Existential: store mixed conformers
let mixed: [any Shape] = [Circle(r: 1), Square(s: 2)]
let sum = mixed.reduce(0) { $0 + $1.area() }   // dynamic dispatch
print(String(format: "%.2f", sum))

API-Formen im Vergleich

Wählen Sie die passende Oberfläche:

  • Generic: Der Aufrufer kontrolliert den konkreten Typ.
  • Opak: Sie verbergen den Typ, der pro Funktion festgelegt ist.
  • Existential: Konkrete Typen können dynamisch variieren.
// Three API shapes for the same idea: "make a Shape"

// 1) Generic return — exposes concrete type to caller
func makeGeneric<T: Shape>(_ t: T) -> T { t }

// 2) Opaque return — hides concrete type but fixed
func makeOpaqueCircle() -> some Shape { Circle(r: 1) }

// 3) Existential return — can return any conformer
func makeExistential(_ big: Bool) -> any Shape { big ? Square(s: 3) : Circle(r: 1) }

let g: Circle = makeGeneric(Circle(r: 2))      // caller knows concrete type
let o = makeOpaqueCircle()                      // caller sees only Shape
let e = makeExistential(true)                   // could be Circle or Square at runtime
print(g.area(), o.area(), e.area())

Spickzettel

Richtlinien:

  • Bevorzugen Sie Generics für Performance und starke Typisierung, wenn die Daten homogen sind.
  • Verwenden Sie some P, um Rückgabetypen zu verbergen und APIs stabil zu halten.
  • Verwenden Sie any P für pluginartige oder gemischte Collections.
  • Vermeiden Sie any P für Protokolle mit associated types/Self, sofern Sie keine Type Erasure verwenden.

Entscheidungstest: some/any/Generics

Kurztest: Welche Option verbirgt einen festen konkreten Rückgabetyp hinter dem Protokoll P?

Zusammenfassung

Zusammenfassung:

  • Generics = homogen, am schnellsten, am statischsten.
  • some P = verbirgt den konkreten Typ, der pro Funktion festgelegt ist.
  • any P = heterogen, dynamischer Dispatch.

Häufig gestellte Fragen

Ist die Lektion „Zwischen some, any und Generics wählen“ kostenlos?

Ja — der vollständige Text von „Zwischen some, any und Generics wählen“ 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 „Zwischen some, any und Generics wählen“?

Wählen Sie Generics für homogene statische Typisierung, some P zum Verbergen eines festen konkreten Typs und any P für heterogenen Polymorphismus. 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 „Zwischen some, any und Generics wählen“?

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. some P (opake Ergebnistypen): konkrete Typen verbergen
  2. any P (Existenzialtyp): Abwägungen und dynamischer Dispatch
  3. Zwischen some, any und Generics wählen
← Zurück zu Swift Academy