У меня есть список наблюдаемых, которые являются запросами информации о расстоянии и продолжительности Google от определенной точки. Я пытаюсь загрузить свой экран только тогда, когда вся эта информация извлечена, но моя подписка на следующую для этих наблюдаемых никогда не вызывается (вызывается строка "наблюдатель.onNext (viewModel)", и информация уже извлечена, только подписка (onNext) не вызывается). Как я могу ждать, пока эти наблюдаемые завершены?
func stationInfoObservable(userLocation: CLLocationCoordinate2D, stations: [Station]) -> [Observable<GasStationTableCellViewModel>] {
var observables: [Observable<GasStationTableCellViewModel>] = []
for station in stations {
observables.append(Observable.create({ observer in
guard let toCoordinate = station.coordinate() else { return Disposables.create() }
self.mapDirections.routes(from: userLocation.asPlace(), to: toCoordinate.asPlace()) { routes, error in
if let error = error {
logger.error(error)
} else {
guard let leg = routes.first?.legs?.first else {
return
}
guard let distance = leg.distance?.text, let duration = leg.duration?.text else { return }
station.distanceInKMFromUserLocation = distance
station.distanceInMinutesFromUserLocation = duration
let viewModel = GasStationTableCellViewModel(station: station)
observer.onNext(viewModel)
observer.onCompleted()
}
}
return Disposables.create()
}))
}
return observables
}
Я пытаюсь подписаться таким образом (РЕДАКТИРОВАТЬ: я сейчас пытаюсь использовать zip, но диск / подписка продолжает не вызываться):
Observable.zip(observables)
.asDriver(onErrorJustReturn: [])
.drive(onNext: { test in
print(test)
}, onCompleted: {
print("aa")
}).disposed(by: DisposeBag())