Sobes.tech
Middle

Jakiego obsługi końcowej napisałeś?

sobes.tech AI

Odpowiedź od AI

Przykład obsługi zakończenia dla żądania sieciowego z możliwymi błędami:

// Definiujemy typ dla wyniku żądania (sukces lub błąd)
typealias RequestResult<T: Codable> = Result<T, Error>

// Funkcja do wykonania żądania sieciowego
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
    // W tym bloku zwykle wykonuje się wywołanie URLSession.shared.dataTask
    // z obsługą odpowiedzi, dekodowaniem JSON i błędami.

    // Przykład obsługi (załóżmy, że otrzymano poprawną odpowiedź i dane)
    let sampleData = Data() // Tu powinny być rzeczywiste dane
    let decoder = JSONDecoder()

    do {
        let decodedData = try decoder.decode(T.self, from: sampleData)
        completion(.success(decodedData)) // Wywołujemy completion z sukcesem
    } catch {
        completion(.failure(error)) // Wywołujemy completion z błędem, jeśli dekodowanie się nie powiodło
    }

    // Przykład obsługi błędu sieci lub serwera
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Wywołujemy completion z błędem sieci
}

// Przykład użycia:
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("Sukces! Otrzymane dane: \(data)")
    case .failure(let error):
        print("Błąd żądania: \(error.localizedDescription)")
    }
}