Swift Academy · leksjon

Inferens i closures

Forstå inferens av parametere og returverdier i closures.

Leksjon 4 av 413 trinn

Inferens i closures er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 4 av 4. 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 4 leksjoner.

Closures utleder typer

I mange kontekster kan en closure utlede både parameter- og returtypen sin fra hvordan den brukes.

let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)

Utledet parametertype

Når du sender en closure til map, forteller elementtypen Swift hva $0 er, slik at du kan utelate parametertypen.

let names = ["ada", "bob"]
let upper = names.map { $0.uppercased() }
print(upper)

Utledet returtype

Innholdet i closuren bestemmer returtypen. Hvis den returnerer en Bool, blir closuren et predikat.

let nums = [1, 2, 3, 4, 5]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)

Forkortede argumentnavn

$0, $1 og så videre viser til closure-argumentene etter plassering når typene deres er utledet.

let sums = zip([1, 2, 3], [10, 20, 30]).map { $0 + $1 }
print(Array(sums))

Eksplisitte parametere ved behov

Du kan fortsatt navngi parametere og angi typer hvis det gjør koden tydeligere.

let nums = [3, 1, 2]
let sorted = nums.sorted { (a: Int, b: Int) -> Bool in
    return a < b
}
print(sorted)

Inferens fra konteksten

Hvis du tildeler en closure til en variabel med angitt type, forteller variabeltypen closuren hva signaturen skal være.

let add: (Int, Int) -> Int = { a, b in a + b }
print(add(2, 3))

Trailing closure

Trailing closure-syntaks lar inferensen fungere samtidig som kallstedene blir mer lesbare.

let result = [5, 3, 8, 1].sorted { $0 > $1 }
print(result)

Inferens i reduce

I reduce utledes akkumulator- og elementtypene fra startverdien og sekvensen.

let total = [1, 2, 3, 4].reduce(0) { acc, x in acc + x }
print(total)

Returnere fra en closure

Closures med ett uttrykk kan utelate nøkkelordet return; verdien av uttrykket returneres, og typen utledes.

let lengths = ["hi", "hello", "hey"].map { $0.count }
print(lengths)

Closure-variabel med typeannotasjon

Når closuren lagres uten å kalles umiddelbart, bør du angi closure-typen slik at Swift kan utlede innholdet.

let transform: (String) -> Int = { $0.count }
print(transform("swift"))

Når du må bruke annotasjon

Hvis den omkringliggende konteksten ikke gir noen typeinformasjon, kan ikke Swift utlede closure-parametrene, og du må angi dem med annotasjoner.

let isPositive: (Int) -> Bool = { n in n > 0 }
print(isPositive(5), isPositive(-3))

Rask kontroll

Test inferens i closures.

Oppsummering

Closures utleder parameter- og returtyper fra konteksten, for eksempel map, filter eller en variabel med angitt type. Bruk de forkortede navnene $0/$1 når typene er utledet, og angi typer eksplisitt når det ikke finnes noen kontekst.

let f: (Int) -> Int = { $0 + 1 }
let xs = [1, 2, 3].map { $0 * 10 }
print(f(9), xs)
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 «Inferens i closures» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Inferens i closures», 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 4 leksjoner.

Hva lærer jeg i «Inferens i closures»?

Forstå inferens av parametere og returverdier i closures. 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 4 av 4.

Hvor lang tid tar leksjonen «Inferens i closures»?

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. Slik fungerer typeinferens
  2. Når De bør legge til eksplisitte annotasjoner
  3. Inferens med literaler
  4. Inferens i closures
← Tilbake til Swift Academy