Swift Academy · leksjon

where-betingelser på extensions

Bruk where på type - og protocol -extensions for å legge til API-er bare når begrensningene gjelder (for eksempel Array where Element: Equatable og Collection where Element == Int ).

Leksjon 3 av 38 trinn

where-betingelser på extensions er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 3 av 3. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 3 leksjoner.

Hvorfor utvidelser med begrensninger?

Legg til API-er bare når typer oppfyller bestemte begrensninger, ved å bruke where i utvidelser:

  • Typeutvidelser (for eksempel Array)
  • Protokollutvidelser (for eksempel Collection)
  • Begrensninger med eksakt samsvar (for eksempel Element == Int)

Typeutvidelse med begrensning

Knytt metoder til Array bare når Element er Equatable. Arrayer med elementer som ikke er Equatable, får ikke tilgang til disse API-ene.

extension Array where Element: Equatable {
    func removing(_ value: Element) -> [Element] {
        filter { $0 != value }
    }
    func containsAll(_ others: [Element]) -> Bool {
        others.allSatisfy(self.contains)
    }
}
print([1,2,3].removing(2))        // [1,3]
print(["a","b"].containsAll(["b"])) // true

Protokollutvidelse med where

En protokollutvidelse legger til et API for alle samsvarende typer når begrensningen gjelder (her enhver Collection med elementer som er Comparable).

extension Collection where Element: Comparable {
    var isSorted: Bool {
        // Pair each element with the next; ensure non-decreasing order
        zip(self, dropFirst()).allSatisfy(<=)
    }
}
print([1,2,3].isSorted)     // true
print([3,1,2].isSorted)     // false

Begrensninger med eksakt samsvar

Bruk likhetsbegrensninger for målrettede API-er, for eksempel bare når Element == Int. Disse blir ikke tilgjengelige for andre elementtyper.

extension Collection where Element == Int {
    var sum: Int { reduce(0, +) }
    func average() -> Double {
        isEmpty ? 0 : Double(sum) / Double(count)
    }
}
print([1,2,3].sum)          // 6
print([1,2,3].average())    // 2.0

API-er basert på egenskaper

Begrens etter egenskap (protokoller som Numeric og Hashable) for å sette sammen kraftige, gjenbrukbare hjelpefunksjoner.

extension Collection where Element: Numeric {
    var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
    var uniques: [Element] {
        var seen = Set<Element>()
        return filter { seen.insert($0).inserted }
    }
}
print([1,2,2,3].uniques)    // [1,2,3]
print([1,2,3].total)        // 6

Desigannotater

Tips:

  • Foretrekk minimale begrensninger for bredere gjenbruk.
  • Unngå overlappende utvidelser som definerer det samme medlemmet; det kan gjøre overload-oppløsningen forvirrende.
  • Dokumenter antakelser (rekkefølge, unikhet, numeriske domener).

Formålet med begrensede utvidelser

Rask sjekk: Hva kan begrensede utvidelser brukes til?

Oppsummering

Oppsummering: Bruk where på type-/protokollutvidelser for å målrette API-er presist – etter egenskap (: Comparable) eller nøyaktig type (== Int) – og holde koden trygg og lett å finne frem i.

Gratis å komme i gang

Lær deg Swift med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
122
Leksjoner
409

Ofte stilte spørsmål

Er leksjonen «where-betingelser på extensions» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «where-betingelser på extensions», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 3 leksjoner.

Hva lærer jeg i «where-betingelser på extensions»?

Bruk where på type - og protocol -extensions for å legge til API-er bare når begrensningene gjelder (for eksempel Array where Element: Equatable og Collection where Element == Int ). Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Swift Academy?

Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 3.

Hvor lang tid tar leksjonen «where-betingelser på extensions»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?

Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Betinget protokolltilpasning
  2. Rekursive begrensninger og generics av høyere orden
  3. where-betingelser på extensions
← Tilbake til Swift Academy