条件和布尔操作符:amb、takeWhile、skipWhile、takeUntil、skipWhile、skipUntil

  • amb

    当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。并忽略掉其他的 Observables
let subject1 = PublishSubject<Int>()
let subject2 = PublishSubject<Int>()
let subject3 = PublishSubject<Int>()
 
subject1
    .amb(subject2)
    .amb(subject3)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
subject2.onNext(1)
subject1.onNext(20)
subject2.onNext(2)
subject1.onNext(40)
subject3.onNext(0)
subject2.onNext(3)
subject1.onNext(60)
subject3.onNext(0)
subject3.onNext(0)
  • takeWhile

    该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成
Observable.of(2, 4, 3, 5, 6)
    .takeWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • takeUntil

    除了订阅源 Observable 外,通过 takeUntil 方法我们还可以监视另外一个 Observable, 即 notifier
    如果 notifier 发出值或 complete 通知,那么源 Observable 便自动完成,停止发送事件,即第二个Observable是第一个Observable的结束信号
let source = PublishSubject<String>()
let notifier = PublishSubject<String>()
        
source
    .takeUntil(notifier)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
        
source.onNext("a")
source.onNext("b")
        
//停止接收消息
notifier.onNext("z")
  • skipWhile

    该方法用于跳过前面所有满足条件的事件,一旦遇到不满足条件的事件,之后就不会再跳过了
Observable.of(2, 3, 4, 5, 6)
    .skipWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • skipUntil

    同上面的 takeUntil 一样,skipUntil 除了订阅源 Observable 外,通过 skipUntil 方法我们还可以监视另外一个 Observable, 即 notifier
    与 takeUntil 相反的是。源 Observable 序列事件默认会一直跳过,直到 notifier 发出值或 complete 通知,即第二个Observable是第一个Observable的开始信号
let source = PublishSubject<Int>()
let notifier = PublishSubject<Int>()
 
source
    .skipUntil(notifier)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
source.onNext(1)
source.onNext(2)
 
//开始接收消息
notifier.onNext(0)
 
source.onNext(3)
source.onNext(4)
 
//仍然接收消息
notifier.onNext(0)
 
source.onNext(5)

参考文章:Swift - RxSwift的使用详解10(条件和布尔操作符:amb、takeWhile、skipWhile等)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容