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 επιτρέπει σαφή διαχωρισμό μεταξύ επιτυχούς ολοκλήρωσης και σφάλματος.