Bedingte Konformitäten
Lassen Sie einen generischen Typ nur dann einem Protokoll konform sein, wenn sein Typparameter die Einschränkungen erfüllt (z. B. Box<T>: Equatable where T: Equatable ).
Bedingte Konformitäten ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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 bedingte Konformität?
Bedingte Konformität fügt eine Protokollkonformität nur dann hinzu, wenn die Typparameter bestimmte Constraints erfüllen. Das hält APIs präzise, vermeidet Boilerplate und lässt sich leistungsfähig mit der Standardbibliothek kombinieren.
Grundlage eines generischen Typs
Beginnen Sie mit einem generischen Typ. Ohne zusätzliche Arbeit ist Box weder Equatable noch Hashable konform, selbst wenn T dies ist.
struct Box<T> {
var value: T
}
let bi = Box(value: 3)
let bs = Box(value: "hi")
// At this point Box has no Equatable/Hashable, regardless of T.Bedingte Equatable-Konformität
Fügen Sie Equatable nur hinzu, wenn T: Equatable gilt. Code, der Boxen von nicht-Equatable-Typen vergleicht, wird nicht kompiliert, was für zusätzliche Sicherheit sorgt.
extension Box: Equatable where T: Equatable {
static func == (lhs: Box<T>, rhs: Box<T>) -> Bool {
lhs.value == rhs.value
}
}
print(Box(value: 5) == Box(value: 5)) // true
// Works because Int is Equatable
// print(Box(value: someNonEquatable) == ...) // won't compileBedingte Hashable-Konformität
Übernehmen Sie Hashable entsprechend nur, wenn das Element Hashable ist. Dann funktionieren Set und Dictionary mit Box<T>.
extension Box: Hashable where T: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(value)
}
}
let set: Set<Box<Int>> = [Box(value: 1), Box(value: 1)]
print(set.count) // 1 because Hashable is available only when T: HashableFeatures mit where bedingt anbieten
Verwenden Sie extension ... where, um Methoden nur für bestimmte Fähigkeiten bereitzustellen, zum Beispiel bei T: Numeric, und halten Sie dadurch die grundlegende API klein.
// Add extra APIs only when T supports them
extension Box where T: Numeric {
func doubled() -> T { value + value }
}
print(Box(value: 7).doubled()) // 14 (Int is Numeric)
// Box(value: "hi").doubled() // won't compile — String not NumericIn der Standardbibliothek zu sehen
Sie verwenden dies bereits täglich:
- Array: Equatable nur, wenn
Element: Equatablegilt. - Hashing für Dictionary/Set nur, wenn Schlüssel oder Elemente
Hashablesind. - Gleichheit von Optional nur, wenn
Wrapped: Equatablegilt.
Vorteil: APIs sind präzise und zur Compile-Zeit sicher.
Definitions-Check
Kurzer Check: Was ermöglicht eine bedingte Konformität?
Zusammenfassung
Zusammenfassung: Verwenden Sie extension Type: Protocol where ..., um Konformitäten und APIs nur dann hinzuzufügen, wenn die Constraints erfüllt sind. So bleibt der Code präzise, sicher und leicht verständlich.
Häufig gestellte Fragen
Ist die Lektion „Bedingte Konformitäten“ kostenlos?
Ja — der vollständige Text von „Bedingte Konformitäten“ 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 „Bedingte Konformitäten“?
Lassen Sie einen generischen Typ nur dann einem Protokoll konform sein, wenn sein Typparameter die Einschränkungen erfüllt (z. B. Box<T>: Equatable where T: Equatable ). 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 3.
Wie lange dauert die Lektion „Bedingte Konformitäten“?
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
- Bedingte Konformitäten
- Rekursive Constraints und Generics höherer Ordnung
- where-Klauseln für Extensions