Junior — Middle
Hogyan valósítható meg egy wrapper az olyan metódusokhoz, amelyek befejezési zárat használnak, az async/await szintaxis alkalmazásával?
sobes.tech MI
Válasz az MI-től
Чтобы обернуть метод с замыканием завершения (completion handler) в async/await, можно использовать withCheckedContinuation или withCheckedThrowingContinuation в Swift. Это позволяет преобразовать асинхронный метод с callback в функцию, которую можно вызвать с await.
Пример:
func fetchData(completion: @escaping (Result<String, Error>) -> Void) {
// Асинхронная операция с completion
}
func fetchDataAsync() async throws -> String {
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)
}
}
}
}
Такой подход упрощает работу с асинхронным кодом и улучшает читаемость.