Назад к вопросам
Middle
119
questionbank
Какой completion handler вы написали?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Я написал множество completion handler'ов для различных задач, в том числе:
- Обработка результатов сетевых запросов (получение данных, статуса выполнения).
- Асинхронные операции с базой данных (сохранение, чтение, обновление).
- Операции файловой системы (чтение, запись, удаление).
- Анимации и пользовательские интерфейсы (завершение анимации, обработка пользовательских жестов).
- Кастомные асинхронные операции с возможностью передачи результата и ошибок.
Например, при работе с URLSession я часто использую такой шаблон:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Обработка ошибки
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Обработка невалидного ответа или данных
completion(.failure(URLError(.badServerResponse)))
return
}
// Успешная обработка данных
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Обработка ошибки декодирования
completion(.failure(error))
}
}.resume()
где completion — это closure типа (Result<SomeModel, Error>) -> Void. Использование Result позволяет четко разделить успешное завершение и ошибку.