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 ).
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 compileBetinget 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: HashableAktivé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 NumericSet 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.
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
- Betingede conformances
- Rekursive begrænsninger og higher-order generics
- where-klausuler på extensions