Назад к вопросам
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)")
    }
}