Sobes.tech
Junior — Middle

È possibile implementare un proprio wrapper per metodi con completion handler, utilizzando la sintassi async/await?

sobes.tech AI

Risposta dell'AI

Sì, è possibile creare un proprio wrapper per i metodi con gestore di completamento, utilizzando async/await, applicando la costruzione con withCheckedContinuation o withUnsafeContinuation. Questo permette di trasformare un'API orientata ai callback in una asincrona, comoda da usare con async/await.

Esempio in 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)
            }
        }
    }
}

Qui, fetchData è un metodo con gestore di completamento, e fetchDataAsync è il suo wrapper con async/await.