Как наблюдать, если свойство не изменяется в течение указанного c интервала в RxSwift - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу наблюдать speed свойство обновлений CLLocation и запускать событие, если скорость не меняется в течение 10 секунд и если скорость меняется, сбрасывает таймер. До сих пор мог придумать только столько кода.

let location: Observable<CLLocation>

location.subscribe(onNext: { (coordinates) in
    print(coordinates)
})
.disposed(by: disposeBag)

Я предполагаю, что мы могли бы использовать debounce или throttle, но не уверен, как.

1 Ответ

0 голосов
/ 01 апреля 2020

Попробуйте это:

// will emit element when speed doesn't change for 10 seconds
let lastLocation = location
    .distinctUntilChanged { $0.speed == $1.speed }
    .debounce(.seconds(10), scheduler: MainScheduler.instance) 

Observable.merge(location, lastLocation)
    .subscribe(onNext: { coordinates in
        print(coordinates)
    })
    .disposed(by: disposeBag)
...