Swift Academy · Lektion

Betingede conformances

Få en generisk type til at conform'e til en protocol kun hvis dens typeparameter opfylder begrænsninger (f.eks. Box<T>: Equatable where T: Equatable ).

Lektion 1 af 38 trin

Betingede conformances er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 1 af 3. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 3 lektioner i alt.

Hvorfor betinget protokoltilpasning?

Betinget protokoltilpasning tilføjer en protokoltilpasning, kun når typeparametre opfylder bestemte begrænsninger. Det holder API'er præcise, undgår overflødig standardkode og fungerer effektivt sammen med standardbiblioteket.

Grundlag for en generisk type

Start med en generisk type. Uden ekstra arbejde er Box ikke protokoltilpasset til Equatable/Hashable, selv hvis T er det.

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.

Betinget Equatable

Tilføj Equatable kun hvis T: Equatable. Kode, der sammenligner bokse med typer, der ikke er Equatable, kan ikke kompileres (god sikkerhed).

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 compile

Betinget Hashable

På samme måde skal du kun tilføje Hashable, når elementet er Hashable. Derefter fungerer Set/Dictionary med 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: Hashable

Aktivér funktionalitet med where

Brug extension ... where til kun at eksponere metoder for bestemte egenskaber (f.eks. T: Numeric), så basis-API'et forbliver lille.

// 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 Numeric

Set i standardbiblioteket

Du bruger allerede dette hver dag:

  • Array: Equatable kun når Element: Equatable.
  • Dictionary/Set bruger kun hashberegning, når nøgler/elementer er Hashable.
  • Optional har kun lighed, når Wrapped: Equatable.

Fordel: API'er er præcise og sikre ved kompilering.

Definitionstjek

Hurtig kontrol: Hvad gør betinget protokoltilpasning muligt?

Opsummering

Opsummering: Brug extension Type: Protocol where ... til kun at tilføje protokoltilpasninger og API'er, når begrænsningerne er opfyldt. Det holder koden præcis, sikker og let at gennemskue.

Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Betingede conformances” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Betingede conformances”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Betingede conformances”?

Få en generisk type til at conform'e til en protocol kun hvis dens typeparameter opfylder begrænsninger (f.eks. Box<T>: Equatable where T: Equatable ). Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 3.

Hvor lang tid tager lektionen “Betingede conformances”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Betingede conformances
  2. Rekursive begrænsninger og higher-order generics
  3. where-klausuler på extensions
← Tilbage til Swift Academy