Я погружаю пальцы в RxSwift и хотел бы создать «потоковый API» для одного из моих обычных вызовов API.Создание «реактивного» API с помощью RxSwift
Моя идея - принять регулярный вызов (который уже использует наблюдаемые без каких-либо проблем), и таймер запускает такие вызовы и отправляет результаты на одно и то же наблюдаемое, поэтому контроллер просмотра может автоматически обновляться, поэтому вместо этого (псевдокод следует):
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 к соединению, но я не могу понять как взять ссылку на раковину и передать ей aro und к методу, вызванному таймером, чтобы фактически отправить события вниз по каналу, учитывая, что обработчик для таймера должен быть автономным методом. Я пытался бросить расширения таймера блока от BlocksKit, но таймер был запущен каждую секунду вместо того, чтобы быть запущенным с заданным интервалом, который победил цель.
Я также читал об операторе Interval
, но я не уверен, что это правильный путь.
Любые указатели о том, как это сделать правильно?
Конечной целью было бы перезапустить таймер только после завершения предыдущего вызова (либо с успехом, либо с ошибкой).