Middle
Kokį užbaigimo tvarkyklę parašėte?
sobes.tech AI
Atsakymas iš AI
Pavyzdys užbaigimo tvarkyklės, skirtos tinklo užklausai su galimomis klaidomis:
// Nustatome rezultatų tipą užklausai (sėkmė arba klaida)
typealias RequestResult<T: Codable> = Result<T, Error>
// Funkcija tinklo užklausai atlikti
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
// Šiame bloke dažniausiai kviečiama URLSession.shared.dataTask
// su atsako apdorojimu, JSON dekodavimu ir klaidomis.
// Pavyzdys apdorojimo (tarkime, gauta sėkminga atsakymas ir duomenys)
let sampleData = Data() // Čia turėtų būti tikri duomenys
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(T.self, from: sampleData)
completion(.success(decodedData)) // Kviečiame užbaigimą sėkmingai
} catch {
completion(.failure(error)) // Kviečiame užbaigimą su klaida, jei dekodavimas nepavyko
}
// Pavyzdys tinklo ar serverio klaidos apdorojimo
// let networkError = URLError(.notConnectedToInternet)
// completion(.failure(networkError)) // Kviečiame užbaigimą su tinklo klaida
}
// Pavyzdys naudojimo:
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("Sėkmė! Gauti duomenys: \(data)")
case .failure(let error):
print("Užklausos klaida: \(error.localizedDescription)")
}
}