"Completion Handler" (manipulador de conclusão) é um bloco de código que é passado como argumento para uma função assíncrona para ser executado quando a operação assíncrona for concluída. Essa abordagem é frequentemente usada para lidar com tarefas que levam algum tempo para serem concluídas, como operações de rede, leitura de arquivos ou outras operações demoradas.
A assinatura básica de uma função com um completion handler em Swift pode parecer com isso:
func minhaFuncaoAssincrona(parametros: Tipo, completion: @escaping (TipoDeRetorno) -> Void) {
// Implementação assíncrona
// Quando a operação assíncrona for concluída, chame o completion handler
completion(resultado)
}
Aqui estão os elementos chave:
@escaping: Indica que o bloco de código pode "escapar" do contexto da função, o que significa que pode ser armazenado e executado posteriormente.(TipoDeRetorno) -> Void: A assinatura do completion handler, indicando que ele aceita um parâmetro do tipo TipoDeRetorno e não retorna nada (Void).Vamos criar um exemplo simples de uma função assíncrona em Swift que simula uma operação de download de dados de uma API usando um completion handler. Aqui está um exemplo básico:
import Foundation
// Definindo uma estrutura simples para representar dados baixados
struct DadosBaixados {
let mensagem: String
}
// Função que simula uma operação assíncrona de download de dados
func baixarDados(completion: @escaping (DadosBaixados) -> Void) {
// Simulando um atraso de 2 segundos para representar uma operação assíncrona
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
let dados = DadosBaixados(mensagem: "Dados baixados com sucesso!")
// Chamando o completion handler com os dados baixados
completion(dados)
}
}
// Exemplo de uso da função com completion handler
baixarDados { dados in
// Este bloco será executado quando os dados forem baixados
print(dados.mensagem)
}
Neste exemplo:
DadosBaixados é uma estrutura simples para representar os dados que poderiam ser baixados de uma API real.baixarDados é uma função que simula uma operação de download assíncrona. Ela aceita um completion handler que será chamado após a simulação do download.baixarDados { dados in ... } é onde você fornece o código que deve ser executado quando os dados forem baixados. Dentro desse bloco, você tem acesso aos dados baixados e pode realizar as operações desejadas.Ao executar este código, você verá a mensagem "Dados baixados com sucesso!" sendo impressa no console após um atraso simulado de 2 segundos, representando a conclusão da operação assíncrona.