Daniyal Raza:
location.filter({$0.speed < 25})
.debounce(.seconds(20), scheduler: MainScheduler.instance)
.subscribe(onNext: { (location) in
print(location)
}).disposed(by: disposeBag)
Buts:
- Si la propriété de vitesse reste inférieure
25 for 20 seconds
puis imprimer emplacement - Si
within 20
seconde vitesse vaabove 25
annuler l'événement émis - Si la vitesse reste
below 25
pendant 40 secondes, l' emplacement doit être imprimé deux fois , une fois à 20 secondes et de nouveau à 40 secondes.
Problème actuel est le suivant : Si la vitesse passe en dessous de 25 et moins de 20 secondes observable reçoit un deuxième événement avec une vitesse inférieure à 25 , il annule l'événement précédent en raison de debounce
.
hell0friend:
Vous devez ajouter l'opérateur distinctUntilChanged:
location.distinctUntilChanged { $0.speed < 25 && $1.speed < 25 }
.debounce(.seconds(20), scheduler: MainScheduler.instance)
.filter { $0.speed < 25 }
.subscribe(onNext: { location in
print(location)
})
.disposed(by: disposeBag)
EDIT cas où l' emplacement doit être imprimé toutes les 20 secondes si la vitesse est inférieure à 25:
let isSpeedBelow = location
.distinctUntilChanged { $0.speed < 25 && $1.speed < 25 }
.flatMapLatest { location -> Observable<Double> in
if location.speed >= 25 {
return Observable.just(location)
}
return Observable<Int>.timer(.seconds(10), period: nil, scheduler: MainScheduler.instance)
.map { _ in location.speed }
}
.map { $0 < 25 }
.startWith(true)
Observable<Int>.timer(.seconds(10), period: .seconds(10), scheduler: MainScheduler.instance)
.withLatestFrom(isSpeedBelow)
.filter { $0 }
.withLatestFrom(location)
.subscribe(onNext: { location in
print(location)
})
.disposed(by: disposeBag)