Обёртка над делегатом геолокации падает с SWIFT TASK CONTINUATION MISUSE
func currentLocation() async throws -> CLLocation {
try await withCheckedThrowingContinuation { continuation in
self.continuation = continuation
manager.startUpdatingLocation()
}
}
func locationManager(_ m: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
continuation?.resume(returning: locations.last!)
}
Приложение падает с сообщением, что продолжение возобновлено больше одного раза. Почему?
- Делегат вызывается много раз, continuation не обнулён
- withChecked нельзя вызывать внутри класса
- Делегат геолокации приходит в фоновом потоке
- Нужен withUnsafeContinuation вместо Checked
