Sobes.tech
Middle

Ποιο χειριστή ολοκλήρωσης γράψατε;

sobes.tech AI

Απάντηση από AI

Παράδειγμα χειριστή ολοκλήρωσης για ένα αίτημα δικτύου με πιθανά σφάλματα:

// Ορίζουμε έναν τύπο για το αποτέλεσμα του αιτήματος (επιτυχία ή σφάλμα)
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)) // Καλούμε το completion με επιτυχία
    } catch {
        completion(.failure(error)) // Καλούμε το completion με σφάλμα αν η αποκωδικοποίηση αποτύχει
    }

    // Παράδειγμα διαχείρισης σφάλματος δικτύου ή διακομιστή
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Καλούμε το completion με σφάλμα δικτύου
}

// Παράδειγμα χρήσης:
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)")
    }
}