withCheckedContinuationwithCheckedContinuation — это функция Swift concurrency, которая создаёт точку ручного приостановления, позволяя тебе адаптировать callback-based API в современную модель async/await.
Ты оборачиваешь существующую функцию на основе колбэков и используешь предоставленное continuation для возобновления выполнения:
func fetchData() async throws -> Data {
try await withCheckedThrowingContinuation { continuation in
legacyFetchData { result, error in
if let error = error {
continuation.resume(throwing: error)
} else {
continuation.resume(returning: result!)
}
}
}
}
Внутри колбэка ты должен вызвать resume ровно один раз, используя один из этих методов:
continuation.resume(returning:) — возобновляет с успешным значениемcontinuation.resume(throwing:) — возобновляет с ошибкойОбозначение "checked" обеспечивает проверку безопасности на этапе выполнения:
resume вызван более одного разаЭто делает баги сразу видимыми во время разработки. Для оптимизированного production-кода withUnsafeContinuation пропускает эти проверки, но не даёт никаких гарантий безопасности.
Используй withCheckedContinuation, когда интегрируешь legacy или сторонние callback API со Swift concurrency. Всегда убеждайся, что твоё continuation возобновляется ровно один раз — "checked" вариант строго контролирует это правило, делая его более безопасным выбором во время разработки.
Функция withCheckedContinuation упадёт во время выполнения, если continuation будет возобновлён более одного раза, и эта проверка безопасности — ключевое отличие между checked и unchecked вариантами.
Новый — ещё не проверен сообществом
Вы