0Pricing
Swift Academy · Lektion

Generische Einschränkungen und where-Klauseln

Wenden Sie mehrere Einschränkungen, Gleichtypanforderungen und bedingte Erweiterungen an.

Generische Einschränkungen und where-Klauseln ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. 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 4 Lektionen.

Zusammenfassung der Generics-Grundlagen

Generics ermöglichen Ihnen, flexiblen und wiederverwendbaren Code zu schreiben, der mit jedem Typ funktioniert.

func identity<T>(_ value: T) -> T { return value }
print(identity(42))
print(identity("hello"))

Einschränkung auf einen Typ

Schränken Sie einen generischen Parameter mithilfe von T: Protocol auf die Konformität zu einem Protokoll ein.

func largest<T: Comparable>(_ a: T, _ b: T) -> T {
  return a > b ? a : b
}
print(largest(3, 7))

Mehrere Einschränkungen mit &

Fordern Sie mithilfe von &, dass ein Typ mehreren Protokollen entspricht.

func process<T: Equatable & Hashable>(_ items: [T]) -> Set<T> {
  return Set(items)
}
print(process([1,2,2,3]))

where-Klauseln für Funktionen

Mit einer where-Klausel nach der Parameterliste können Sie präzisere Einschränkungen hinzufügen.

func allEqual<T: Equatable>(_ array: [T]) -> Bool where T: CustomStringConvertible {
  guard let first = array.first else { return true }
  return array.allSatisfy { $0 == first }
}

where bei Erweiterungen

Erweitern Sie einen Typ nur, wenn sein generischer Parameter eine Anforderung erfüllt.

extension Array where Element: Numeric {
  var sum: Element { reduce(0, +) }
}
print([1,2,3].sum)

Anforderungen an denselben Typ

Schränken Sie zwei zugehörige Typen mit T == U auf denselben Typ ein.

func zip2<A: Sequence, B: Sequence>(_ a: A, _ b: B) -> [(A.Element, B.Element)]
  where A.Element == B.Element {
  return Swift.zip(a, b).map { ($0.0, $0.1) }
}

Bedingte Konformität

Lassen Sie einen generischen Typ nur dann einem Protokoll entsprechen, wenn seine Parameter die Einschränkungen erfüllen.

extension Array: Equatable where Element: Equatable {
  // stdlib already does this, shown for illustration
}
print([1,2] == [1,2])

Generische Klassen mit Einschränkungen

Generics von Klassen können ebenfalls Einschränkungen enthalten und so Typsicherheit bei der Instanziierung gewährleisten.

class Box<T: Codable> {
  var value: T
  init(_ v: T) { self.value = v }
}
let box = Box(42)

Protokoll mit Einschränkungen für zugehörige Typen

Verwenden Sie where in Protokolldefinitionen, um zugehörige Typen einzuschränken.

protocol Container {
  associatedtype Item: Equatable
  var items: [Item] { get }
  func contains(_ item: Item) -> Bool
}

Mehrere where-Klauseln

Kombinieren Sie mehrere durch Kommas getrennte where-Bedingungen für komplexe Anforderungen.

func merge<C: Collection>(_ a: C, _ b: C) -> [C.Element]
  where C.Element: Comparable, C.Element: Hashable {
  return Array(Set(a + b)).sorted()
}

Spezialisierung generischer Typen

Swift spezialisiert generische Funktionen zur Compile-Zeit für konkrete Typen, wodurch Leistungsoptimierungen möglich werden.

// @_specialize instructs the compiler to emit a specialized version
@_specialize(where T == Int)
func add<T: Numeric>(_ a: T, _ b: T) -> T { a + b }

Kurztest

Wie fordern Sie, dass ein generischer Typ sowohl Comparable als auch Hashable entspricht?

Zusammenfassung der Lektion

Generische Einschränkungen mit T: Protocol, mehrere Einschränkungen über &, where-Klauseln für präzise Anforderungen, Anforderungen an denselben Typ und bedingte Konformität geben Ihnen präzise Kontrolle über generischen Code.

Häufig gestellte Fragen

Ist die Lektion „Generische Einschränkungen und where-Klauseln“ kostenlos?

Ja — der vollständige Text von „Generische Einschränkungen und where-Klauseln“ 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 4 Lektionen.

Was lerne ich in „Generische Einschränkungen und where-Klauseln“?

Wenden Sie mehrere Einschränkungen, Gleichtypanforderungen und bedingte Erweiterungen an. 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 1 von 4.

Wie lange dauert die Lektion „Generische Einschränkungen und where-Klauseln“?

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. Generische Einschränkungen und where-Klauseln
  2. Opaque Types mit dem Schlüsselwort some
  3. Existenztypen mit any und Type Erasure
  4. Primäre Associated Types und typisierte Throws
← Zurück zu Swift Academy