возникли проблемы с объединением в наблюдаемые в flatMapLatest
Логика : при каждом событии следующего действия я хочу объединить его со следующим событием getCurrentLocation
, которое происходит после ActivityEventбыл запущен, объедините их в кортеж и затем что-то с ним сделайте.
В настоящее время это выглядит так:
ActivitiesController
.start()
.flatMapLatest { activity in
LocationController.shared.getCurrentLocation().map { ($0, activity) }
}
.subscribe(onNext: { (activity, currentLocation in
print("")
})
.disposed(by: disposeBag)
Код местоположения:
func getCurrentLocation() -> Observable<CLLocation> {
self.requestLocationUseAuthorizationIfNotDetermined(for: .always)
self.locationManager.requestLocation()
return self.publishSubject.take(1) // take next object from the publish subject (only one)
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last, location.horizontalAccuracy > 0 else {
return
}
self.publishSubject.onNext(location)
}
Так какмы знаем, что requestLocation()
запускает didUpdateLocations, мы думали, что логика должна работать, но она не
в результате locationManager не всегда обновляет и возвращает старые значения вместо новых
Doребята, у вас есть идеи?