Sobes.tech
Middle

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

sobes.tech AI

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

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

  • Επεξεργασία αποτελεσμάτων δικτυακών αιτημάτων (λήψη δεδομένων, κατάσταση εκτέλεσης).
  • Ασύγχρονες λειτουργίες με βάσεις δεδομένων (αποθήκευση, ανάγνωση, ενημέρωση).
  • Λειτουργίες συστήματος αρχείων (ανάγνωση, εγγραφή, διαγραφή).
  • Κινήσεις και διεπαφές χρήστη (ολοκλήρωση κινήσεων, επεξεργασία κινήσεων χρήστη).
  • Εξατομικευμένες ασύγχρονες λειτουργίες με δυνατότητα μετάδοσης αποτελεσμάτων και σφαλμάτων.

Για παράδειγμα, όταν εργάζομαι με το URLSession, συχνά χρησιμοποιώ αυτό το πρότυπο:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Επεξεργασία σφάλματος
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Επεξεργασία μη έγκυρης απάντησης ή δεδομένων
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Επιτυχής επεξεργασία δεδομένων
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Επεξεργασία σφάλματος αποκωδικοποίησης
        completion(.failure(error))
    }
}.resume()

όπου το completion είναι μια κλεισίματος τύπου (Result<SomeModel, Error>) -> Void. Η χρήση του Result επιτρέπει σαφή διαχωρισμό μεταξύ επιτυχούς ολοκλήρωσης και σφάλματος.