Swift-Nedleggelser

Annonser

Nedleggelser I Swift 4 ligner på selvstendige funksjoner organisert som blokker og kalt hvor Som Helst Som c og Objective C-språk. Konstanter og variable referanser definert inne i funksjonene er fanget og lagret i nedleggelser. Funksjoner betraktes som spesielle tilfeller av nedleggelser, og det tar følgende tre former−

Globale Funksjoner Nestede Funksjoner Lukkeuttrykk
Ha et navn. Ikke ta opp noen verdier Har et navn. Capture verdier fra omsluttende funksjon Unnamed Closures capture verdier fra tilstøtende blokker

Lukking uttrykk I Swift 4 språk følger skarpe, optimalisering, og lette syntaks stiler som inkluderer.

  • Utlede parameter-og returverdityper fra kontekst.
  • Implisitt avkastning fra enkeltuttrykkslukninger.
  • Shorthand argument navn og
  • Etterfølgende nedleggelse syntaks

Syntaks

Følgende er en generisk syntaks for å definere nedleggelse som godtar parametere og returnerer en datatype−

{ (parameters) −> return type in statements}

Følgende er et enkelt eksempel−

let studname = { print("Welcome to Swift Closures") }studname()

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−

Welcome to Swift Closures

følgende lukking godtar to parametere og returnerer En Bool-verdi−

{ (Int, Int) −> Bool in Statement1 Statement 2 --- Statement n}

Følgende er et enkelt eksempel−

let divide = { (val1: Int, val2: Int) -> Int in return val1 / val2 }let result = divide(200, 20)print (result)

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−

10

Uttrykk I Nedleggelser

Nestede funksjoner gir en praktisk måte å navngi og definere kodeblokker på. I stedet for å representere hele funksjonsdeklarasjonen og navnekonstruksjoner brukes til å betegne kortere funksjoner. Representerer funksjonen i en klar kort uttalelse med fokusert syntaks oppnås gjennom nedleggelse uttrykk.

Stigende Rekkefølge Program

Sortering av en streng oppnås Ved Swift 4s nøkkel reservert funksjon «sortert» som allerede er tilgjengelig i standardbiblioteket. Funksjonen sorterer de gitte strengene i stigende rekkefølge og returnerer elementene i en ny matrise med samme størrelse og datatype som nevnt i den gamle matrisen. Det gamle arrayet forblir det samme.

To argumenter er representert i den sorterte funksjonen−

  • Verdier Av Kjent type representert som arrays.

  • Arrayinnhold (Int, Int) og returnerer En Boolsk verdi (Bool) hvis arrayet er sortert riktig, vil det returnere sann verdi, ellers vil den returnere false.

en normal funksjon med inngangsstreng er skrevet og sendt til sortert funksjon for å få strengene sortert til ny array som er vist nedenfor−

func ascend(s1: String, s2: String) -> Bool { return s1 > s2}let stringcmp = ascend(s1: "Swift 4", s2: "great")print (stringcmp)

Når vi kjører over programmet ved hjelp av lekeplass, får vi følgende resultat−

true

den første matrisen som skal sorteres for iskrem er gitt som «Swift 4» og «great». Funksjon for å sortere arrayet er erklært som streng datatype og returtypen er nevnt Som Boolsk. Begge strengene sammenlignes og sorteres i stigende rekkefølge og lagres i en ny matrise. Hvis sorteringen utføres vellykket, vil funksjonen returnere en sann verdi, ellers vil den returnere false.

Nedleggelse uttrykk syntaks bruker−

  • konstante parametere,
  • variable parametere og
  • inout-parametere.

Lukkeuttrykk støtter ikke standardverdier. Variadiske parametere og Tupler kan også brukes som parametertyper og returtyper.

let sum = { (no1: Int, no2: Int) -> Int in return no1 + no2 }let digits = sum(10, 20)print(digits)

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−

30

parameterne og returtypedeklarasjonene som er nevnt i funksjonserklæringen, kan også representeres av inline closure expression-funksjonen med’ in ‘ – søkeord. Når deklarere parameter og retur typer’ i ‘ søkeord brukes til å betegne at kroppen av lukkingen.

Enkeltuttrykk Implisitt Returnerer

her gjør funksjonstypen for den sorterte funksjonens andre argument det klart at En Bool-verdi må returneres ved lukkingen. Fordi lukketeksten inneholder et enkelt uttrykk (s1 > s2) som returnerer En Bool-verdi, er det ingen tvetydighet, og returordet kan utelates.

for å returnere Et enkelt uttrykk setning i uttrykkslukninger ‘return’ søkeord er utelatt i sin erklæring del.

var count: = let descending = count.sorted(by: { n1, n2 in n1 > n2 })let ascending = count.sorted(by: { n1, n2 in n1 < n2 })print(descending)print(ascending)

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−


erklæringen selv definerer klart at når string1 er større enn streng 2 retur sant ellers falsk derfor retur setning er utelatt her.

Kjente Type Nedleggelser

Vurder tillegg av to tall. Vi vet at tillegg vil returnere heltall datatypen. Derfor er kjente type nedleggelser deklarert som−

let sub = { (no1: Int, no2: Int) -> Int in return no1 - no2 }let digits = sub(10, 20)print(digits)

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−

-10

Deklarere Shorthand Argument Navn Som Nedleggelser

Swift 4 gir automatisk shorthand argument navn til inline nedleggelser, som kan brukes til å referere til verdiene av nedleggelsen argumenter med navnene $0, $1, $2, og så videre.

var shorthand: (String, String) -> Stringshorthand = {  }print(shorthand("100", "200"))

her refererer $0 og $1 til lukkingens første og Andre Strengargumenter.

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−

200

Swift 4 forenkler brukeren å representere Inline nedleggelser som stenografi argument navn ved å representere $0, $1, $2 — $n.

Closures argument list er utelatt i definisjon delen når vi representerer stenografi argument navn inne lukke uttrykk. Basert på funksjonstypen vil shorthand-argumentnavnene bli avledet. Siden stenografi argumentet er definert i uttrykket kroppen ‘i’ nøkkelordet er utelatt.

Nedleggelser som Operatørfunksjoner

Swift 4 gir en enkel måte å få tilgang til medlemmene ved å bare gi operatørfunksjoner som nedleggelser. I de forrige eksemplene brukes nøkkelordet ‘Bool’ til å returnere enten ‘true’ når strengene er like, ellers returnerer den ‘false’.

uttrykket gjøres enda enklere av operatorfunksjonen i lukning som−

let numb = var sortedNumbers = numb.sorted ({ (left: Int, right: Int) -> Bool in return left < right})let asc = numb.sorted(<)print(asc)

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−


Nedleggelser Som Tilhengere

Passerer funksjonens siste argument til et lukkeuttrykk deklareres ved hjelp av ‘Etterfølgende Nedleggelser’. Den er skrevet utenfor funksjonen () med {}. Dens bruk er nødvendig når det ikke er mulig å skrive funksjonen inline på en enkelt linje.

reversed = sorted(names) {  > }

hvor {$0 > $1} er representert som etterfølgende nedleggelser deklarert utenfor (navn).

import Foundationvar letters = let twoletters = letters.map({ (state: String) -> String in return state.substringToIndex(advance(state.startIndex, 2)).uppercaseString})let stletters = letters.map() { .substringToIndex(advance(.startIndex, 2)).uppercaseString }print(stletters)

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−


Fange Verdier Og Referansetyper

I Swift 4, fange konstanter og variabler verdier er gjort ved hjelp av nedleggelser. Det refererer videre og endrer verdiene for disse konstantene og variablene inne i lukkekroppen, selv om variablene ikke lenger eksisterer.

Fange konstant og variabel verdier oppnås ved å bruke nestet funksjon ved å skrive funksjon med i kroppen av annen funksjon.

en nestet funksjon fanger−

  • Ytre funksjonsargumenter.
  • Fange konstanter og variabler definert I Den Ytre funksjonen.

I Swift 4, når en konstant eller en variabel er erklært inne i en funksjon, referanse til at variablene er også automatisk opprettet av nedleggelse. Det gir også muligheten til å referere mer enn to variabler som samme lukning som følger−

let decrem = calcDecrement(forDecrement: 18)decrem()

her vil oneDecrement og Decrement variabler begge peke på samme minneblokk som lukkingsreferanse.

func calcDecrement(forDecrement total: Int) -> () -> Int { var overallDecrement = 100 func decrementer() -> Int { overallDecrement -= total print(overallDecrement) return overallDecrement } return decrementer}let decrem = calcDecrement(forDecrement: 18)decrem()decrem()decrem()

når vi kjører programmet ovenfor ved hjelp av lekeplass, får vi følgende resultat−

826446

når hver gang den ytre funksjonen calcDecrement kalles, påkaller den decremer () – funksjonen og reduserer verdien med 18 og returnerer resultatet ved hjelp av ytre funksjon calcDecrement. Her fungerer calcDecrement som en lukning.

selv om funksjonen decremer() ikke har noen argumenter lukking som standard refererer til variablene ‘overallDecrement’ og ‘total’ ved å fange sine eksisterende verdier. Kopien av verdiene for de angitte variablene lagres med den nye decremer () – funksjonen. Swift 4 håndterer minnehåndteringsfunksjoner ved å tildele og deallokere minneplasser når variablene ikke er i bruk.

Annonser