associatedtype och generiska protokoll
Definiera protokoll med associatedtype , se hur typer som uppfyller protokollet binder dem och använd generiska funktioner med protokollbegränsningar.
associatedtype och generiska protokoll är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 1 av 3. 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 3 lektioner.
Varför associerade typer?
Protokoll kan göras generiska med associatedtype. Typer som följer protokollet binder platshållaren till en konkret typ.
Protokoll med associatedtype
associatedtype Item fungerar som en typparameter. Krav kan använda den i metoder, subscript och egenskaper.
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(index: Int) -> Item { get }
}Konkret protokollanpassning
En typ som följer protokollet väljer en konkret Item (här Int) genom att implementera kraven med den typen.
struct IntStack: Container {
// Binds Item == Int implicitly by usage
private var items: [Int] = []
mutating func append(_ item: Int) { items.append(item) }
var count: Int { items.count }
subscript(index: Int) -> Int { items[index] }
}
var st = IntStack()
st.append(10); st.append(20)
print(st.count, st[1])Generisk protokollanpassning
En generisk typ kan följa protokollet genom att binda Item == Element, vilket gör protokollet generiskt och återanvändbart.
struct Stack<Element>: Container {
private var items: [Element] = []
mutating func append(_ item: Element) { items.append(item) }
var count: Int { items.count }
subscript(index: Int) -> Element { items[index] }
// Here, associatedtype Item == Element
}
var s = Stack<String>()
s.append("hi"); s.append("bye")
print(s.count, s[1])Använda protokollet i generics
Begränsa funktioner med C: Container. Ni kan använda C.Item abstrakt utan att fastställa typen.
// Generic algorithm operating on any Container
func dumpFirstTwo<C: Container>(_ c: C) {
// We can talk about C.Item but not assume concrete type
if c.count >= 2 {
print("0:", c[0])
print("1:", c[1])
} else {
print("too few elements")
}
}
dumpFirstTwo(s) // works with Stack<String>
dumpFirstTwo(st) // works with IntStackAnteckningar och tips
Anteckningar:
- Protokoll med associerade typer kan inte användas direkt som typer; prioritera generics eller type erasure.
- Namnge platshållare tydligt (Item, Element).
- Protokollanpassningen kan anges explicit (
typealias Item = ...) eller härledas från signaturerna.
Betydelsen av associatedtype
Snabb kontroll: Vad betyder associatedtype?
Sammanfattning
Sammanfattning: Använd associatedtype för att göra protokoll generiska. Typer som följer protokollet väljer den konkreta typen, och generiska funktioner kan arbeta med vilken sådan typ som helst via begränsningar.
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 ”associatedtype och generiska protokoll” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”associatedtype och generiska protokoll”, 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 3 lektioner.
Vad lär jag mig i ”associatedtype och generiska protokoll”?
Definiera protokoll med associatedtype , se hur typer som uppfyller protokollet binder dem och använd generiska funktioner med protokollbegränsningar. 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 3.
Hur lång tid tar lektionen ”associatedtype och generiska protokoll”?
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
- associatedtype och generiska protokoll
- Mönster för typeliminering (AnySequence/AnyIterator)
- När ska existentials (any P) användas i stället för generics