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)")
}
}