Вступить в клуб →
средняявопросSwift Concurrency: Task, акторы и MainActor

Обёртка над делегатом геолокации падает с 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

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела