Em poucas palavras, Closures são blocos de código que podem ser atribuídos a variáveis, passados como argumentos para funções e armazenados em estruturas de dados.
A vantagem das closures é a capacidade de encapsular funcionalidades em blocos de código independentes, que podem ser passados como argumentos, capturar seu contexto e promover uma programação mais modular, flexível e legível.
OBS: Toda função é uma closure, mas nem toda closure é uma função.
A sintaxe da expressão de uma closure tem a seguinte forma geral:
{ (parameters) -> ReturnType in
// statements
}
Também pode ser escrito assim:
{ (parameters) -> ReturnType = {
// statements
}
A closure 'soma' recebe dois argumentos, a e b, e retorna a soma de a e b.
let soma = { (a: Int, b: Int) in
return a + b
}
Chamando a closure através da constante
let resultado = soma(5, 3) // resultado será 8
Armazena uma closure que não aceita nenhum argumento e retorna uma string de saudação.
let greetClosure: () -> String = {
return "Olá, mundo!"
}