Begränsningar för typparametrar
Kräv konformans hos generiska parametrar.
Begränsningar för typparametrar är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Sammanfattning av generics
En generisk funktion använder en typparameter som <T> för att fungera med många typer. Men ett obegränsat T kan bara skickas vidare, inte undersökas. Begränsningar aktiverar ytterligare funktioner.
func identity<T>(_ x: T) -> T { x }
print(identity(5))
print(identity("hi"))Begränsningen Comparable
Att skriva <T: Comparable> garanterar att värden av typen T stöder <, > och liknande operatorer, så att Ni kan jämföra dem.
func largest<T: Comparable>(_ a: T, _ b: T) -> T {
a > b ? a : b
}
print(largest(3, 9))
print(largest("apple", "pear"))Varför begränsningar behövs
Utan Comparable avvisar kompilatorn a > b, eftersom inte alla typer stöder operatorn. Begränsningen är löftet som gör operationen tillåten.
func minOf<T: Comparable>(_ list: [T]) -> T? {
list.min()
}
print(minOf([4, 2, 8])!)Begränsningen Equatable
Equatable aktiverar == och !=. Använd den för att räkna eller hitta matchande element.
func count<T: Equatable>(_ x: T, in list: [T]) -> Int {
list.filter { $0 == x }.count
}
print(count(2, in: [2, 3, 2, 2]))Begränsningen Hashable
Hashable gör att Ni kan använda värden som medlemmar i Set eller som nycklar i dictionaries.
func unique<T: Hashable>(_ list: [T]) -> [T] {
Array(Set(list))
}
print(unique([1, 1, 2, 3, 3]).sorted())Protokollbegränsningar
Vilket protokoll som helst kan användas som begränsning. Här aktiverar ett anpassat protokoll dess metod för den generiska parametern.
protocol Speaker { func speak() -> String }
struct Dog: Speaker { func speak() -> String { "Woof" } }
func announce<T: Speaker>(_ x: T) {
print(x.speak())
}
announce(Dog())Klassbegränsningar
Ni kan kräva att T ärver från en viss klass, vilket ger tillgång till klassens medlemmar.
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())Flera begränsningar
Kombinera begränsningar med & för att kräva flera protokoll samtidigt.
func show<T: CustomStringConvertible & Equatable>(_ a: T, _ b: T) {
print(a.description, a == b)
}
show(5, 5)Flera typparametrar
En funktion kan ha flera begränsade parametrar, var och en med sina egna krav.
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]))Begränsningar för typer
Generiska typer, inte bara funktioner, kan också ha begränsningar. En generisk struct kan kräva att dess parameter uppfyller ett protokoll.
struct SortedBox<T: Comparable> {
var items: [T]
var smallest: T? { items.min() }
}
print(SortedBox(items: [5, 1, 9]).smallest!)Numeriska begränsningar
Standardprotokoll som Numeric gör att generisk kod kan utföra aritmetik med Int, Double och fler typer.
func sum<T: Numeric>(_ list: [T]) -> T {
list.reduce(0, +)
}
print(sum([1, 2, 3]))
print(sum([1.5, 2.5]))Snabb kontroll
Testa Er förståelse av typparameterbegränsningar.
Sammanfattning
Typparameterbegränsningar (<T: Protocol> eller <T: SomeClass>) talar om för kompilatorn vad en generisk typ kan göra. Ni har sett Comparable, Equatable, Hashable, Numeric, anpassade protokoll, klassbegränsningar, flera begränsningar med & samt begränsningar för generiska typer.
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Begränsningar för typparametrar” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Begränsningar för typparametrar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Begränsningar för typparametrar”?
Kräv konformans hos generiska parametrar. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Begränsningar för typparametrar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Begränsningar för typparametrar
- where-satser på funktioner
- Begränsa associerade typer
- Generiska subscript och extensions