Swift – Uzávěry

Reklamy

Uzávěry v Swift 4 jsou podobné, že self-obsažené funkce organizována jako bloky a tzv. kdekoliv, jako je C a Objective C jazyků. Konstanty a proměnné odkazy definované uvnitř funkcí jsou zachyceny a uloženy v uzávěrech. Funkce jsou považovány za speciální případy uzávěry a trvá následující tři formy−

Globální Funkce Vnořené Funkce Uzavření Výrazy
Mít jméno. Nezachytávejte žádné hodnoty mají název. Snímání hodnot z obvodových funkce Nejmenovaný Uzávěry zachytit hodnoty od sousedních bloků

Uzavření výrazy v Swift 4 jazyk následovat ostrý, optimalizace, a lehký syntaxe stylů, které obsahuje.

  • odvozování typů parametrů a návratových hodnot z kontextu.
  • implicitní návraty z uzávěrů s jedním výrazem.
  • Zkratka jména argumentů a
  • Koncové uzavření syntaxe

Syntax

Následující je obecný syntax definovat uzávěr, který přijímá parametry a vrátí typ dat−

{ (parameters) −> return type in statements}

Následující jednoduchý příklad−

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

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−

Welcome to Swift Closures

Následující uzavření přijímá dva parametry a vrací Bool hodnotu−

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

Následující jednoduchý příklad−

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

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−

10

Výrazy ve Uzávěry

Vnořené funkce poskytují pohodlný způsob pojmenování a definování bloků kódu. Místo reprezentace celé deklarace funkcí a jmenné konstrukce se používají k označení kratších funkcí. Reprezentace funkce v jasném stručném prohlášení se soustředěnou syntaxí je dosažena pomocí závěrečných výrazů.

Vzestupně Program

Třídění řetězec je dosaženo Rychlé 4s klíč vyhrazena funkce „řazeny“, který je již k dispozici ve standardní knihovně. Funkce bude třídit dané struny ve vzestupném pořadí a vrací prvky v nové pole s stejné velikosti a typu dat uvedených v staré pole. Staré pole zůstává stejné.

dva argumenty jsou zastoupeny uvnitř tříděné funkce−

  • hodnoty známého typu reprezentované jako pole.

  • Obsah pole (Int, Int) a vrátí Booleovskou hodnotu (Bool) pokud je pole správně tříděno, vrátí true hodnota, jinak se vrátí false.

normální funkce s vstupní řetězec je zapsán a předán do tříděného funkci získat řetězce řazeny do nového pole, které je zobrazeno níže−

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

Když jsme se spustit výše uvedený program, pomocí dětské hřiště, dostaneme následující výsledek−

true

počáteční pole, které mají být tříděny pro icecream je uveden jako „Swift 4“ a „velký“. Funkce pro řazení pole je deklarována jako datový typ řetězce a její návratový typ je uveden jako Boolean. Oba řetězce jsou porovnány a seřazeny ve vzestupném pořadí a uloženy v novém poli. Pokud je třídění provedeno úspěšně, funkce vrátí skutečnou hodnotu, jinak vrátí false.

Uzavření výraz syntaxe používá−

  • konstantní parametry,
  • proměnné parametry, a
  • inout parametrů.

uzavírací výraz nepodporoval výchozí hodnoty. Variadické parametry a n-tice lze také použít jako typy parametrů a návratové typy.

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

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−

30

parametry a návratový typ prohlášení uvedené v příkazu funkce může být také reprezentován inline uzavření výraz funkce s “ v “ klíčové slovo. Jakmile deklarovat parametry a návratové typy‘ in ‚ Klíčové slovo se používá k označení, že tělo uzávěru.

Single Expression implicitní vrací

zde typ funkce druhého argumentu tříděné funkce jasně ukazuje, že hodnota Bool musí být vrácena uzávěrem. Protože tělo uzávěru obsahuje jediný výraz (s1 > s2), který vrací hodnotu Bool, neexistuje žádná dvojznačnost a klíčové slovo návratu lze vynechat.

Chcete-li vrátit jeden výraz příkaz ve výrazu uzávěry ‚návrat‘ Klíčové slovo je vynechán v jeho prohlášení části.

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)

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−


prohlášení sám jasně definuje, že když je řetězec1 větší než řetězec 2 vrací true, jinak false, tedy návrat prohlášení, je zde vynechán.

známé typové uzávěry

zvažte přidání dvou čísel. Víme, že přidání vrátí celočíselný datový typ. Proto známý druh uzávěry jsou deklarovány jako−

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

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−

-10

Vyhlášení Zkratka Argument Jména jako Uzávěry

Swift 4 automaticky poskytuje zkratka jména argumentů pro inline uzávěry, které mohou být použity k odkazovat na hodnoty uzavření argumenty podle jména $0, $1, $2, a tak dále.

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

zde $0 a $ 1 odkazují na argumenty prvního a druhého řetězce uzavření.

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−

200

Swift 4 usnadňuje uživateli představují Inline uzávěry jako zkratka argument názvy, což představuje $0, $1, $2 — $n.

Uzávěry argument seznam je vynechán v definici oddílu, když jsme se představují zkratka jména argumentů uvnitř uzavření výrazy. Na základě typu funkce budou odvozeny názvy argumentů zkratky. Protože je zkratka definována v těle výrazu, Klíčové slovo “ in “ je vynecháno.

uzávěry jako funkce operátora

Swift 4 poskytuje snadný způsob přístupu k členům tím, že poskytuje funkce operátora jako uzávěry. V předchozích příkladech se Klíčové slovo „Bool“ používá k návratu buď „true“, když jsou řetězce stejné, jinak vrátí „false“.

výraz je ještě jednodušší tím, že provozovatel funkci v uzavření jako−

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

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−


Uzávěry jako Přívěsy

Předávání funkce je poslední argument k uzavření výraz je deklarována pomocí ‚Koncové Uzávěry‘. Zapisuje se mimo funkci () pomocí {}. Jeho použití je nutné, pokud není možné zapsat funkci inline na jeden řádek.

reversed = sorted(names) {  > }

kde {$0 > $ 1} jsou reprezentovány jako koncové uzávěry deklarované mimo (názvy).

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)

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−


Zachycení Hodnoty a Referenční Typy

V Swift 4, zachycující konstant a proměnných hodnot je provedeno s pomocí uzávěry. Dále odkazuje a upravuje hodnoty těchto konstant a proměnných uvnitř tělesa uzávěru, i když proměnné již neexistují.

zachycení konstantních a proměnných hodnot je dosaženo pomocí vnořené funkce zápisem funkce s v těle jiné funkce.

vnořená funkce zachycuje−

  • argumenty vnější funkce.
  • zachytit konstanty a proměnné definované v rámci vnější funkce.

v Swift 4, když je konstanta nebo proměnná deklarována uvnitř funkce, odkaz na tyto proměnné jsou také automaticky vytvořeny uzávěrem. To také poskytuje zařízení naleznete více než dvě proměnné jako stejný uzavření takto−

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

Tady oneDecrement a Snížení hodnoty proměnných budou oba bodě stejný blok paměti jako uzavření reference.

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()

Když jsme se spustit výše uvedený program pomocí dětské hřiště, dostaneme následující výsledek−

826446

Když každý a pokaždé, když se vnější funkce calcDecrement se nazývá to vyvolá decrementer() funkce a sníží hodnota o 18 a vrátí výsledek s pomocí vnější funkce calcDecrement. Zde calcDecrement působí jako uzavření.

i když funkce decrementer () nemá žádné argumenty uzavření ve výchozím nastavení odkazuje na proměnné ‚overaldecrement‘ a ‚total‘ zachycením jeho existujících hodnot. Kopie hodnot pro zadané proměnné jsou uloženy s novou funkcí decrementer (). Swift 4 zpracovává funkce správy paměti přidělením a přidělením paměťových prostorů, když se proměnné nepoužívají.

inzeráty