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