Swift Academy · Lektion

associatedtype och generiska protokoll

Definiera protokoll med associatedtype , se hur typer som uppfyller protokollet binder dem och använd generiska funktioner med protokollbegränsningar.

Lektion 1 av 38 steg

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 IntStack

Anteckningar 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.

Gratis att börja

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

  1. associatedtype och generiska protokoll
  2. Mönster för typeliminering (AnySequence/AnyIterator)
  3. När ska existentials (any P) användas i stället för generics
← Tillbaka till Swift Academy