Swift – Fechamentos

Publicidade

tampas de Swift 4 são semelhantes aos da auto-contido funções organizado como blocos e chamadas em qualquer lugar, como no C e objective C idiomas. Constantes e referências variáveis definidas dentro das funções são capturadas e armazenadas em fechos. Funções são considerados como casos especiais de encerramentos e leva os seguintes três formas−

Funções Globais Funções Aninhadas Fechamento de Expressões
Tem um nome. Não capture quaisquer valores tenha um nome. Valores de captura da função envolvente valores de captura Sem Nome dos blocos adjacentes

expressões de encerramento na linguagem Swift 4 seguem crisp, otimização e estilos de sintaxe leve que inclui.

  • inferir os parâmetros e devolver os tipos de valor do contexto.
  • retornos implícitos dos encerramentos de uma única expressão.
  • Abreviada argumento de nomes e
  • Final de fechamento de sintaxe

Sintaxe

a Seguir está uma sintaxe genérica para definir encerramento que aceita parâmetros e retorna um tipo de dados−

{ (parameters) −> return type in statements}

a Seguir está um exemplo simples−

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

Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−

Welcome to Swift Closures

A sequência do encerramento aceita dois parâmetros e retorna um valor Booleano−

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

a Seguir está um exemplo simples−

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

Quando vamos executar o programa acima usando parque infantil, temos a resultado seguinte−

10

expressões em fechamentos

funções aninhadas fornecem uma maneira conveniente de nomear e definir blocos de código. Em vez de representar toda a declaração de função e Construções de nome são usados para denotar funções mais curtas. Representar a função em uma clara breve declaração com sintaxe focada é alcançado através de expressões de fechamento.

Programa de ordem ascendente

ordenação uma cadeia de caracteres é alcançada pela função reservada chave Swift 4s “tried”, que já está disponível na biblioteca padrão. A função irá ordenar os strings indicados na ordem ascendente e retorna os elementos em um novo array com o mesmo tamanho e tipo de dados mencionados no array antigo. A antiga Matriz permanece a mesma.

dois argumentos são representados dentro da função ordenada−

  • valores de tipo conhecido representados como arrays.

  • Array contents (Int, Int) and returns a Boolean value (Bool) if the array is tried properly it will return true value otherwise it will return false.

Uma função normal com a seqüência de caracteres de entrada é gravada e transmitida para os ordenados da função para obter as seqüências de classificados para a nova matriz, que é mostrado abaixo−

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

Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−

true

A inicial do array a ser ordenado para o gelado é dado como o “Swift 4” e “grande”. A função para ordenar o array é declarada como string datatype e seu tipo de retorno é mencionado como booleano. Ambos os strings são comparados e ordenados em ordem ascendente e armazenados em um novo array. Se a ordenação for realizada com sucesso, a função retornará um valor verdadeiro, caso contrário retornará falso.

Closure expression syntax uses−

  • parâmetros constantes,
  • parâmetros variáveis,e
  • parâmetros inout.

a expressão de Fecho não suportava valores predefinidos. Parâmetros variádicos e tuplas também podem ser usados como tipos de parâmetros e tipos de retorno.

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

quando executamos o programa acima usando playground, obtemos o seguinte resultado−

30

os parâmetros e declarações de tipo de retorno mencionados na instrução da função também podem ser representados pela função de expressão de fechamento em linha com a palavra-chave “in”. Uma vez que declarar parâmetros e tipos de retorno ” em ” palavra-chave é usado para denotar que o corpo do fechamento.

uma única expressão Devolve implícito

aqui, o tipo de função do segundo argumento da função ordenada deixa claro que um valor Bool deve ser devolvido pelo fecho. Como o corpo do fecho contém uma única expressão (s1 > s2) que devolve um valor Bool, não há ambiguidade, e a palavra-chave return pode ser omitida.

para devolver uma única expressão na palavra-chave de fechamento de expressões ‘return’ é omitida na sua parte da declaração.

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)

quando executamos o programa acima usando playground, obtemos o seguinte resultado−


a própria declaração define claramente que quando string1 é maior do que string 2 return true caso contrário false, então a declaração de return é omitida aqui.

tipos conhecidos Encerramentos

considere a adição de dois números. Sabemos que a adição retornará o tipo inteiro de dados. Portanto, conhecida tipo de fechos são declarados como−

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

Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−

-10

Declarando Abreviada Argumento de Nomes como Fechamentos

Swift 4 fornece automaticamente abreviada argumento de nomes para linha de fechamento, que pode ser usado para se referir aos valores de fecho de argumentos pelos nomes de $0, $1, $2, e assim por diante.

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

aqui, $ 0 e $1 referem-se ao primeiro e segundo argumentos do encerramento.

Ao executar o programa acima usando parque infantil, obtemos o seguinte resultado−

200

Swift 4 facilita o utilizador para representar Inline fechamentos como taquigrafia argumento nomes representando $0, $1, $2 — $n.

Fechamentos lista de argumento for omitido na seção de definição de quando representamos abreviada argumento de nomes dentro de encerramento expressões. Baseado no tipo de função os nomes de argumentos estenográficos serão derivados. Uma vez que o argumento abreviado é definido em corpo de expressão, a palavra-chave ‘in’ é omitida.

Encerramentos como funções de operador

Swift 4 fornece uma maneira fácil de acessar os membros, apenas fornecendo funções de operador como encerramentos. Nos exemplos anteriores, a palavra-chave ‘ Bool ‘é usada para devolver’ true ‘quando os strings são iguais, caso contrário devolve’false’.

A expressão é ainda mais simples através da função de operador de fecho como−

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

Quando vamos executar o programa acima usando parque infantil, obtemos o seguinte resultado−


Fechamentos como Trailers

Passando a função do argumento final para o encerramento de expressão é declarada com a ajuda de ‘à Direita de Fechamento. É escrito fora da função () com {}. Seu uso é necessário quando não é possível escrever a função em linha em uma única linha.

reversed = sorted(names) {  > }

em que {$0 > $1} são representados como encerramentos posteriores declarados fora (nomes).

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)

quando executamos o programa acima usando playground, obtemos o seguinte resultado−


capturar valores e tipos de referência

no Swift 4, capturar constantes e valores de variáveis é feito com a ajuda de encerramentos. Ele ainda se refere e modifica os valores para essas constantes e variáveis dentro do corpo de fechamento, mesmo que as variáveis não existam mais.

captura de valores constantes e variáveis é alcançado usando a função aninhada escrevendo função com no corpo de outra função.

uma captura de função aninhada−

  • argumentos da função externa.
  • capturar constantes e variáveis definidas dentro da função externa.

in Swift 4, when a constant or a variable is declared inside a function, reference to that variables are also automatically created by the closure. Ele também fornece a facilidade de referir mais de duas variáveis como o mesmo Encerramento Como segue−

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

aqui oneDecrement e Decrement variables will both point the same memory block as closure 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()

Ao executar o programa acima usando parque infantil, obtemos o seguinte resultado−

826446

Quando cada um e de cada vez que a função externa calcDecrement é chamado ele invoca o decrementer() função e diminui o valor por 18 e retorna o resultado com a ajuda de função externa calcDecrement. Aqui a calcDecrement funciona como um encerramento.

mesmo que a função decrementer () não tenha nenhum argumento fechamento por padrão refere-se a variáveis ‘overallDecrement’ e ‘total’ capturando seus valores existentes. A cópia dos valores para as variáveis especificadas é armazenada com a nova função decrementer (). Swift 4 lida com funções de gerenciamento de memória, alocando e desalocando espaços de memória quando as variáveis não estão em uso.

anúncios publicitários