Introdução ao uso de Closures em Swift

Lucas Migge
Apple Developer Academy | UFPE
3 min readNov 14, 2022

Se você vem se aventurando no mundo da programação para iOS, eventualmente vai se deparar com Closures. Incialmente podem parecer super confusos de entender, depois de se familiarizar um pouco com a sintaxe e o seu uso eles permaneceram estranhos por um tempo, até que começam a aparecer naturalmente no raciocínio de um jovem programador.

Closures são extensamente usadas dentro de SwiftUI, portanto, se você deseja virar um programador nota 10, é importante ir se familiarizando o quanto antes. De forma simples, Closures são funções anônimas que podem ser injetadas como parâmetros para outras funções ou para o ser retorno ser armazenado em alguma variável. Caso você conheça a linguagem Python, lá é possível encontrar um recurso muito semelhante conhecido como lambda.

As funções lambda (Python) funcionam de forma semelhante aos closures (Swift)

Antes de entrar propriamente dentro das funções anônimas, vamos relembrar como geralmente declaramos funções (não anônimas) em swift . As funções recebem um nome (obrigatório), seguidas de parâmetros (caso haja, indicamos o tipo que retorna (caso haja) e, por fim, implementamos a lógica da função.



# DeclaraçãoPadrão
func nomeDaFuncao(parametro : tipoExperado) -> tipoRetornado {
corpo da funcao
}

# DeclaraçãoClosure
let nome : (tipoExperado) -> tipoRetornado = { parametro in
corpo da funcao
}

### Exemplo ###
func dobraNumeroFuncao(numero : Int) -> Int {
return numero * 2
}

let dobraNumeroClosure : (Int) -> Int = { numero in
return numero * 2
}

Agora no formato de Closure, a sintaxe passa por algumas modificações. No lugar de atribuir um nome a função, passamos o bloco de código inteiro para uma referência. Podemos fazer isso porque passamos uma função como tipo de uma varíavel. Sim! Em swift podemos declarar variáveis dos mais diversos tipos, como Int, Float, Bool, ou, no caso, uma função.

### Tipagem

let numeroInt : Int
let booleano : Bool
let closure : () -> Void

Entendido isso, as coisas agora começam a ficar interessantes e podem escalonar até se tornarem complexas. Complexo não deve ser entendido como sendo confuso ou complicado, mas sofisticado, em que se permite usar todos os recursos da linguagem para poder abstrair de forma mais intuitiva o raciocínio que o jovem programador tem em mente.

Observando a variável dobraLista, é possível entender que ela guarda uma função que recebe uma lista de Int e devolve uma lista de Int. Essa lista que será fornecida na função será chamada de listaRecebida no qual será computado o quadrado do numero na lista e devolvido dentro de uma nova lista. É possível observar que o resultado printado no console corresponde ao esperado na lógica implementada.

Por hoje é só. Existe muita coisa a se cobrir quando se trata de Closures dentro do universo de Swift. O intuito deste artigo é despertar a curiosidade para aqueles que ainda não conheciam muito bem esse recurso. Bons estudos!

--

--