hurtige lukninger

reklamer

lukninger i Hurtig 4 svarer til selvstændige funktioner organiseret som blokke og kaldes hvor som helst som C og mål C sprog. Konstanter og variable referencer defineret inde i funktionerne er fanget og gemt i lukninger. Funktioner betragtes som særlige tilfælde af lukninger, og det tager følgende tre former−

globale funktioner indlejrede funktioner Lukningsudtryk
har et navn. Tag ikke nogen værdier har et navn. Capture værdier fra omsluttende funktion unavngivne lukninger capture værdier fra de tilstødende blokke

lukning udtryk i Hurtig 4 sprog følger sprød, optimering, og letvægts syntaks stilarter, som omfatter.

  • udlede parameter-og returværdityper fra kontekst.
  • implicitte afkast fra enkeltudtryk lukninger.
  • stenografiske argumentnavne og
  • efterfølgende lukningssyntaks

syntaks

Følgende er en generisk syntaks til at definere lukning, der accepterer parametre og returnerer en datatype−

{ (parameters) −> return type in statements}

Følgende er et simpelt eksempel−

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

når vi kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−

Welcome to Swift Closures

følgende lukning accepterer to parametre og returnerer en Bool-værdi−

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

Følgende er et simpelt eksempel−

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

når vi kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−

10

udtryk i lukninger

indlejrede funktioner giver en bekvem måde at navngive og definere kodeblokke på. I stedet for at repræsentere hele funktionsdeklarationen og navnekonstruktioner bruges til at betegne kortere funktioner. Repræsenterer funktionen i en klar kort erklæring med fokuseret syntaks opnås gennem lukning udtryk.

stigende Ordreprogram

sortering af en streng opnås ved hjælp af den hurtige 4S-tast reserverede funktion “sorteret”, som allerede er tilgængelig i standardbiblioteket. Funktionen sorterer de givne strenge i stigende rækkefølge og returnerer elementerne i et nyt array med samme størrelse og datatype nævnt i det gamle array. Det gamle array forbliver det samme.

to argumenter er repræsenteret inde i den sorterede funktion−

  • værdier af kendt type repræsenteret som arrays.

  • Array indhold (Int, Int) og returnerer en boolsk værdi (Bool) hvis arrayet er sorteret korrekt, vil det returnere sand værdi ellers vil det returnere falsk.

en normal funktion med inputstreng skrives og sendes til den sorterede funktion for at få strengene sorteret til nyt 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 kører over programmet ved hjælp af legeplads, får vi følgende resultat−

true

det oprindelige array, der skal sorteres for icecream, er angivet som “Hurtig 4” og “stor”. Funktion til at sortere arrayet er erklæret som streng datatype og dens returtype er nævnt som boolsk. Begge strenge sammenlignes og sorteres i stigende rækkefølge og gemmes i et nyt array. Hvis sorteringen udføres vellykket funktionen vil returnere en sand værdi ellers vil det returnere falsk.

lukning udtryk syntaks bruger−

  • konstante parametre,
  • variable parametre og
  • InOut-parametre.

Lukningsudtryk understøttede ikke standardværdier. Variadiske parametre og tupler kan også bruges 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 kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−

30

de parametre og returtypedeklarationer, der er nævnt i funktionserklæringen, kan også repræsenteres af funktionen inline lukningsudtryk med ‘in’ nøgleord. Når erklære parameter og returnere typer ‘ i ‘ søgeord bruges til at betegne, at kroppen af lukningen.

enkelt udtryk Implicit returnerer

her gør funktionstypen for den sorterede funktions andet argument det klart, at en Bool-værdi skal returneres ved lukningen. Fordi lukningens krop indeholder et enkelt udtryk (s1 > s2), der returnerer en Bool-værdi, er der ingen tvetydighed, og returnøgleordet kan udelades.

for at returnere et enkelt udtryk Sætning i udtryk lukninger ‘retur’ søgeord er udeladt 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 kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−


selve udsagnet definerer klart, at når string1 er større end streng 2 Retur sandt ellers falsk dermed retur erklæring udelades her.

kendte type lukninger

overvej tilføjelsen af to tal. Vi ved, at tilføjelse vil returnere heltal datatype. Derfor er kendte type lukninger erklæret som−

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

når vi kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−

-10

erklære stenografi Argument navne som lukninger

Hurtig 4 giver automatisk stenografi argument navne til inline lukninger, som kan bruges til at henvise til værdierne af lukningens argumenter med navnene $0, $1, $2, og så videre.

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

her henviser $0 og $1 til lukningens første og anden streng argumenter.

når vi kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−

200

Hurtig 4 letter brugeren til at repræsentere inline lukninger som stenografi argument Navne ved at repræsentere $0, $1, $2 — $n.

lukninger argument liste er udeladt i definition sektion, når vi repræsenterer stenografi argument Navne inde lukning udtryk. Baseret på funktionstypen vil stenografiske argumentnavne blive afledt. Da stenografiargumentet er defineret i udtrykslegemet, udelades nøgleordet’ in’.

lukninger som Operatørfunktioner

Hurtig 4 giver en nem måde at få adgang til medlemmerne ved blot at give operatørfunktioner som lukninger. I de foregående eksempler bruges nøgleordet ‘ Bool ’til at returnere enten’ true’, når strengene er ens, ellers returnerer det’false’.

udtrykket gøres endnu enklere af operatørfunktion 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 kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−


lukninger som trailere

overførsel af funktionens sidste argument til et lukningsudtryk erklæres ved hjælp af ‘efterfølgende lukninger’. Det er skrevet uden for funktionen () med {}. Dens brug er nødvendig, når det ikke er muligt at skrive funktionen inline på en enkelt linje.

reversed = sorted(names) {  > }

hvor {$0 > $1} er repræsenteret som efterfølgende lukninger erklæret udenfor (navne).

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 kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−


optagelse værdier og referencetyper

i Hurtig 4, opfange konstanter og variabler værdier sker ved hjælp af lukninger. Det henviser yderligere og ændrer værdierne for disse konstanter og variabler inde i lukkekroppen, selvom variablerne ikke længere eksisterer.

optagelse af konstante og variable værdier opnås ved at bruge indlejret funktion ved at skrive funktion med i kroppen af anden funktion.

en indlejret funktion fanger−

  • argumenter for ydre funktion.
  • Optag konstanter og variabler defineret inden for den ydre funktion.

i Hurtig 4, Når en konstant eller en variabel erklæres inde i en funktion, oprettes også henvisning til disse variabler automatisk ved lukningen. Det giver også mulighed for at henvise mere end to variabler som den samme lukning som følger−

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

her vil onedecrement og Decrement variabler begge pege på samme hukommelsesblok som lukningsreference.

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 kører ovenstående program ved hjælp af legeplads, får vi følgende resultat−

826446

når hver gang den ydre funktion calcedecrement kaldes det påberåber decrementer () funktion og formindsker værdien af 18 og returnerer resultatet ved hjælp af ydre funktion calcedecrement. Her fungerer calcedecrement som en lukning.

selvom funktionen decrementer() ikke har nogen argumenter lukning som standard henviser til variablerne ‘overallDecrement’ og ‘total’ ved at fange dens eksisterende værdier. Kopien af værdierne for de angivne variabler gemmes med den nye decrementer () – funktion. Hurtig 4 håndterer hukommelsesstyringsfunktioner ved at tildele og deallokere hukommelsesrum, når variablerne ikke er i brug.

annoncer