Quel opérateur RxSwift à utiliser pour des éléments uniques émis et comment?

Daniyal Raza:
location.filter({$0.speed < 25})
.debounce(.seconds(20), scheduler: MainScheduler.instance)
.subscribe(onNext: { (location) in
    print(location)
}).disposed(by: disposeBag)

Buts:

  1. Si la propriété de vitesse reste inférieure 25 for 20 secondspuis imprimer emplacement
  2. Si within 20seconde vitesse va above 25annuler l'événement émis
  3. Si la vitesse reste below 25pendant 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)

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=392097&siteId=1
conseillé
Classement