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
- Generische Einschränkungen und where-Klauseln
- Opaque Types mit dem Schlüsselwort some
- Existenztypen mit any und Type Erasure
- Primäre Associated Types und typisierte Throws