Sobes.tech
Junior — Middle

Se poate implementa un wrapper propriu pentru metodele cu handler de finalizare (completion handler), folosind sintaxa async/await?

sobes.tech AI

Răspuns de la AI

Da, se poate crea o înveliș personalizat pentru metodele cu handler de finalizare, folosind async/await, aplicând construcția cu withCheckedContinuation sau withUnsafeContinuation. Acest lucru permite transformarea unei API orientate pe callback-uri într-una asincronă, convenabilă pentru utilizare cu async/await.

Exemplu în 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)
            }
        }
    }
}

Aici, fetchData este o metodă cu handler de finalizare, iar fetchDataAsync este învelișul său cu async/await.