Einschränkungen von Typparametern
Fordern Sie Konformität für generische Parameter.
Einschränkungen von Typparametern 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 zu Generics
Eine generische Funktion verwendet einen Typparameter wie <T>, damit sie mit vielen Typen funktioniert. Ein uneingeschränktes T kann jedoch nur weitergereicht, nicht untersucht werden. Einschränkungen schalten zusätzliche Fähigkeiten frei.
func identity<T>(_ x: T) -> T { x }
print(identity(5))
print(identity("hi"))Die Comparable-Einschränkung
Mit <T: Comparable> wird garantiert, dass Werte vom Typ T <, > und ähnliche Operatoren unterstützen, sodass Sie sie vergleichen können.
func largest<T: Comparable>(_ a: T, _ b: T) -> T {
a > b ? a : b
}
print(largest(3, 9))
print(largest("apple", "pear"))Warum Einschränkungen erforderlich sind
Ohne Comparable weist der Compiler a > b zurück, weil nicht jeder Typ diesen Operator unterstützt. Die Einschränkung ist die Zusicherung, die den Vorgang zulässig macht.
func minOf<T: Comparable>(_ list: [T]) -> T? {
list.min()
}
print(minOf([4, 2, 8])!)Die Equatable-Einschränkung
Equatable ermöglicht == und !=. Verwenden Sie es, um übereinstimmende Elemente zu zählen oder zu finden.
func count<T: Equatable>(_ x: T, in list: [T]) -> Int {
list.filter { $0 == x }.count
}
print(count(2, in: [2, 3, 2, 2]))Die Hashable-Einschränkung
Hashable ermöglicht es Ihnen, Werte als Elemente eines Set oder als Schlüssel eines Wörterbuchs zu verwenden.
func unique<T: Hashable>(_ list: [T]) -> [T] {
Array(Set(list))
}
print(unique([1, 1, 2, 3, 3]).sorted())Protokolleinschränkungen
Jedes Protokoll kann als Einschränkung dienen. Hier schaltet ein benutzerdefiniertes Protokoll seine Methode für den generischen Parameter frei.
protocol Speaker { func speak() -> String }
struct Dog: Speaker { func speak() -> String { "Woof" } }
func announce<T: Speaker>(_ x: T) {
print(x.speak())
}
announce(Dog())Klassenbeschränkungen
Sie können verlangen, dass T von einer bestimmten Klasse erbt, und erhalten dadurch Zugriff auf deren Member.
class Animal { func name() -> String { "animal" } }
class Cat: Animal { override func name() -> String { "cat" } }
func describe<T: Animal>(_ x: T) { print(x.name()) }
describe(Cat())Mehrere Einschränkungen
Kombinieren Sie Einschränkungen mit &, um mehrere Protokolle gleichzeitig zu verlangen.
func show<T: CustomStringConvertible & Equatable>(_ a: T, _ b: T) {
print(a.description, a == b)
}
show(5, 5)Mehrere Typparameter
Eine Funktion kann mehrere eingeschränkte Parameter mit jeweils eigenen Anforderungen enthalten.
func zipMap<K: Hashable, V>(_ keys: [K], _ vals: [V]) -> [K: V] {
var d: [K: V] = [:]
for (k, v) in zip(keys, vals) { d[k] = v }
return d
}
print(zipMap(["a", "b"], [1, 2]))Einschränkungen für Typen
Auch generische Typen, nicht nur Funktionen, können Einschränkungen enthalten. Eine generische Struktur kann verlangen, dass ihr Parameter zu einem Protokoll konform ist.
struct SortedBox<T: Comparable> {
var items: [T]
var smallest: T? { items.min() }
}
print(SortedBox(items: [5, 1, 9]).smallest!)Numerische Einschränkungen
Standardprotokolle wie Numeric ermöglichen es generischem Code, arithmetische Operationen mit Int, Double und weiteren Typen auszuführen.
func sum<T: Numeric>(_ list: [T]) -> T {
list.reduce(0, +)
}
print(sum([1, 2, 3]))
print(sum([1.5, 2.5]))Kurzer Test
Testen Sie Ihr Verständnis der Einschränkungen von Typparametern.
Zusammenfassung
Einschränkungen von Typparametern (<T: Protocol> oder <T: SomeClass>) teilen dem Compiler mit, was ein generischer Typ leisten kann. Sie haben Comparable, Equatable, Hashable, Numeric, benutzerdefinierte Protokolle, Klassenbeschränkungen, mehrere Einschränkungen mit & und Einschränkungen für generische Typen kennengelernt.
Häufig gestellte Fragen
Ist die Lektion „Einschränkungen von Typparametern“ kostenlos?
Ja — der vollständige Text von „Einschränkungen von Typparametern“ 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 „Einschränkungen von Typparametern“?
Fordern Sie Konformität für generische Parameter. 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 „Einschränkungen von Typparametern“?
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
- Einschränkungen von Typparametern
- where-Klauseln für Funktionen
- Zugehörige Typen einschränken
- Generische Subscripts und Extensions