Middle
Aký ste napísali handler dokončenia?
sobes.tech AI
Odpoveď od AI
Príklad handlera ukončenia pre sieťovú požiadavku s možnými chybami:
// Definujeme typ pre výsledok požiadavky (úspech alebo chyba)
typealias RequestResult<T: Codable> = Result<T, Error>
// Funkcia na vykonanie siete požiadavky
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
// V tomto bloku sa zvyčajne volá URLSession.shared.dataTask
// s spracovaním odpovede, dekódovaním JSON a chybami.
// Príklad spracovania (predpokladajme, že bola prijatá úspešná odpoveď a dáta)
let sampleData = Data() // Tu by mali byť skutočné dáta
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(T.self, from: sampleData)
completion(.success(decodedData)) // Voláme completion s úspechom
} catch {
completion(.failure(error)) // Voláme completion s chybou, ak dekódovanie zlyhá
}
// Príklad spracovania chyby siete alebo servera
// let networkError = URLError(.notConnectedToInternet)
// completion(.failure(networkError)) // Voláme completion s chybou siete
}
// Príklad použitia:
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("Úspech! Prijaté dáta: \(data)")
case .failure(let error):
print("Chyba požiadavky: \(error.localizedDescription)")
}
}