Sobes.tech
Middle

Какъв обработчик на завършване сте написали?

sobes.tech AI

Отговор от AI

Написах много обработчици за завършване за различни задачи, включително:

  • Обработка на резултатите от мрежови заявки (получаване на данни, статус на изпълнение).
  • Асинхронни операции с бази данни (запазване, четене, актуализиране).
  • Операции с файловата система (четене, запис, изтриване).
  • Анимации и потребителски интерфейси (завършване на анимации, обработка на жестове на потребителя).
  • Персонализирани асинхронни операции с възможност за предаване на резултати и грешки.

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