Sobes.tech
Junior — Middle

Μπορείτε να υλοποιήσετε ένα δικό σας wrapper για μεθόδους με handler ολοκλήρωσης (completion handler), χρησιμοποιώντας τη σύνταξη async/await;

sobes.tech AI

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

Ναι, είναι δυνατή η δημιουργία δικού σας περιτυλίγματος για μεθόδους με χειριστή ολοκλήρωσης, χρησιμοποιώντας async/await, εφαρμόζοντας τη δομή με withCheckedContinuation ή withUnsafeContinuation. Αυτό επιτρέπει τη μετατροπή μιας API προσανατολισμένης σε callback σε μια ασύγχρονη, βολική για χρήση με async/await.

Παράδειγμα σε Swift:

func fetchDataAsync() async throws -> Data {
    return try await withCheckedThrowingContinuation { continuation in
        fetchData { result in
            switch result {
            case .success(let data):
                continuation.resume(returning: data)
            case .failure(let error):
                continuation.resume(throwing: error)
            }
        }
    }
}

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