mapanguan

导航

RxSwift学习笔记9:amb/tabkeWhile/tabkeUntil/skipWhile/skipUntil

     //amb基本介绍
        //当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。
        //并忽略掉其他的 Observables。
        
        let psubject0 = PublishSubject<Int>()
        let psubject1 = PublishSubject<Int>()
        let psubject2 = PublishSubject<Int>()
        
        psubject0.amb(psubject1).amb(psubject2).subscribe(onNext: {print($0)}).disposed(by: disposeBag)
        
        psubject0.onNext(1)
        psubject1.onNext(10)
        psubject2.onNext(100)
        
        psubject0.onNext(2)
        psubject1.onNext(20)
        psubject2.onNext(200)
        /*
         1
         2
         */
        
        print("\n")
        //tabkeWhile:该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。
        Observable.of(1,2,3,4,5).takeWhile({$0<4}).subscribe(onNext: {print($0)}).disposed(by: disposeBag)
        
        print("\n")
        //除了订阅源 Observable 外,通过 takeUntil 方法我们还可以监视另外一个 Observable, 即 notifier。
        //如果 notifier 发出值或 complete 通知,那么源 Observable 便自动完成,停止发送事件。
        psubject1.takeUntil(psubject2).subscribe ( onNext:{print($0)}).disposed(by: disposeBag)
        psubject1.onNext(1)
        psubject1.onNext(2)
        psubject1.onNext(3)
        //停止接收消息
        psubject2.onNext(999)
        psubject1.onNext(4)
        psubject1.onNext(5)
        psubject1.onNext(6)
        /*
         1
         2
         3
         */
        
        print("\n")
        //skipWhile:
        //该方法用于跳过前面所有满足条件的事件。
        //一旦遇到不满足条件的事件,之后就不会再跳过了。
        Observable.of(1,2,3,4,5).skipWhile({$0<4}).subscribe(onNext:{print($0)}).disposed(by: disposeBag)
        /*
         4
         5
         */
        
        print("\n")
        //skipUntil:
        //同上面的 takeUntil 一样,skipUntil 除了订阅源 Observable 外,通过 skipUntil 方法我们还可以监视另外一个 Observable, 即 notifier 。
        //与 takeUntil 相反的是。源 Observable 序列事件默认会一直跳过,直到 notifier 发出值或 complete 通知。
        psubject1.skipUntil(psubject2).subscribe(onNext:{print($0)}).disposed(by: disposeBag)
        psubject1.onNext(1)
        psubject1.onNext(2)
        psubject1.onNext(3)
        //停止接收消息
        psubject2.onNext(999)
        psubject1.onNext(4)
        psubject1.onNext(5)
        psubject1.onNext(6)
        /*
         4
         5
         6
         */

  

posted on 2018-07-09 14:38  mapanguan  阅读(200)  评论(0编辑  收藏  举报