Назад к вопросам
Middle
75
questionbank
Какой completion handler вы написали?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Пример completion handler для сетевого запроса с возможными ошибками:
// Определяем тип для результата запроса (успех или ошибка)
typealias RequestResult<T: Codable> = Result<T, Error>
// Функция для выполнения сетевого запроса
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
// В этом блоке обычно выполняется вызов URLSession.shared.dataTask
// с обработкой ответа, JSON декодированием и ошибок.
// Пример обработки (допустим, получен успешный ответ и данные)
let sampleData = Data() // Здесь должны быть реальные данные
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(T.self, from: sampleData)
completion(.success(decodedData)) // Вызываем completion с успешным результатом
} catch {
completion(.failure(error)) // Вызываем completion с ошибкой, если декодирование не удалось
}
// Пример обработки ошибки сети или сервера
// let networkError = URLError(.notConnectedToInternet)
// completion(.failure(networkError)) // Вызываем completion с ошибкой сети
}
// Пример использования:
struct SampleData: Codable {
let id: Int
let name: String
}
let apiUrl = URL(string: "https://api.example.com/data")!
performRequest(url: apiUrl) { result in
switch result {
case .success(let data):
print("Успех! Получены данные: \(data)")
case .failure(let error):
print("Ошибка запроса: \(error.localizedDescription)")
}
}