Middle
Qual manipulador de conclusão você escreveu?
sobes.tech IA
Resposta da IA
Tenho escrito vários manipuladores de conclusão para várias tarefas, incluindo:
- Processamento de resultados de pedidos de rede (obtenção de dados, estado de execução).
- Operações assíncronas com bases de dados (salvar, ler, atualizar).
- Operações do sistema de ficheiros (leitura, escrita, eliminação).
- Animações e interfaces de utilizador (conclusão de animações, manipulação de gestos do utilizador).
- Operações assíncronas personalizadas com capacidade de transmitir resultados e erros.
Por exemplo, ao trabalhar com URLSession, frequentemente uso este padrão:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Tratamento do erro
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Tratamento de resposta ou dados inválidos
completion(.failure(URLError(.badServerResponse)))
return
}
// Processamento bem-sucedido dos dados
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Tratamento do erro de decodificação
completion(.failure(error))
}
}.resume()
onde completion é uma closure do tipo (Result<SomeModel, Error>) -> Void. O uso de Result permite distinguir claramente entre sucesso e erro.