Sobes.tech
Junior — Middle

Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα της χρήσης async/await και των χειριστών ολοκλήρωσης κατά την εργασία με ασύγχρονο κώδικα;

sobes.tech AI

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

Οι βασικές διαφορές μεταξύ async/await και χειριστών ολοκλήρωσης κατά την εργασία με ασύγχρονο κώδικα σε iOS:

  • Σύνταξη και αναγνωσιμότητα: το async/await επιτρέπει την γραφή ασύγχρονου κώδικα σε διαδοχικό στυλ, βελτιώνοντας την αναγνωσιμότητα και απλοποιώντας την αποσφαλμάτωση. Οι χειριστές ολοκλήρωσης χρησιμοποιούν ενσωματωμένες κλεισίματα, που μπορεί να οδηγήσουν σε "κόλαση callback".

  • Διαχείριση σφαλμάτων: με async/await, μπορείτε να χρησιμοποιήσετε τον συνηθισμένο μηχανισμό try/catch για διαχείριση σφαλμάτων, ενώ στους χειριστές ολοκλήρωσης, τα σφάλματα μεταδίδονται συνήθως μέσω παραμέτρων, που απαιτούν επιπλέον ελέγχους.

  • Συμβατότητα: το async/await υποστηρίζεται από τη Swift από την έκδοση 5.5 και το iOS 15, ενώ οι χειριστές ολοκλήρωσης λειτουργούν σε όλες τις εκδόσεις.

Παράδειγμα με async/await:

func fetchData() async throws -> Data {
    let url = URL(string: "https://example.com/data")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return data
}

Task {
    do {
        let data = try await fetchData()
        print("Ληφθέντα δεδομένα: \(data)")
    } catch {
        print("Σφάλμα: \(error)")
    }
}

Παράδειγμα με χειριστή ολοκλήρωσης:

func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
    let url = URL(string: "https://example.com/data")!
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            completion(.failure(error))
            return
        }
        if let data = data {
            completion(.success(data))
        }
    }.resume()
}

fetchData { result in
    switch result {
    case .success(let data):
        print("Ληφθέντα δεδομένα: \(data)")
    case .failure(let error):
        print("Σφάλμα: \(error)")
    }
}

Επομένως, το async/await απλοποιεί την εργασία με ασύγχρονο κώδικα, καθιστώντας τον πιο κατανοητό και βολικό.