Я погружаюсь в RxSwift и хочу создать «потоковый API» для одного из моих обычных вызовов API.
Моя идея состоит в том, чтобы принять обычный вызов (который уже использует наблюдаемые без каких-либо проблем) и заставить таймер запускать такие вызовы и отправлять результаты на том же наблюдаемом, чтобы контроллер представления мог обновляться автоматически, поэтому вместо этого (псевдокод следует) :
func getLocations() -> Observable<[Location]> {
return Observable<[Location]>.create {
sink in
NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
json in
return json.flatMap { Location($0) }
}
}
}
Я бы хотел, чтобы это произошло (следующий псевдокод):
func getLocations(interval: NSTimeInterval) -> Observable<[Location]> {
return Observable<[Location]>.create {
sink in
NSTimer(interval) {
NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
json in
sink.onNext(json.flatMap { Location($0) })
}
}
}
}
Последнее, что я пробовал, - это добавить в микс NSTimer, но я не могу понять, как взять ссылку на приемник и передать ее методу, вызываемому таймером для фактической отправки событий по конвейеру, учитывая, что обработчик таймера должен быть отдельным методом. Я попытался добавить расширения таймера блока из BlocksKit, но таймер запускался каждую секунду вместо того, чтобы запускаться с заданным интервалом, что привело к поражению цели.
Я также читал об операторе Interval
, но не уверен, что это правильный путь.
Любые указатели на то, как это сделать правильно?
Конечная цель - перезапустить таймер только после завершения предыдущего вызова (успешного или неудачного).