Назад к вопросам
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 позволяет четко разделить успешное завершение и ошибку.