Sobes.tech
Middle

Ի՞նչ ավարտման հենդլեր եք գրել։

sobes.tech AI

Պատասխան AI-ից

Նմուշ՝ ավարտող 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)) // Կոչում ենք ավարտը հաջողությամբ
    } catch {
        completion(.failure(error)) // Կոչում ենք ավարտը սխալով, եթե դեկոդավորումը ձախողվի
    }

    // Օրինակ ցանցի կամ սերվերի սխալի մշակման
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Կոչում ենք ավարտը ցանցային սխալով
}

// Օրինակ օգտագործում:
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)")
    }
}