美文网首页IOS 超级无敌程序员
Swift - RxSwift的使用详解10(条件和布尔操作符:

Swift - RxSwift的使用详解10(条件和布尔操作符:

作者: 八级大狂风AM | 来源:发表于2018-03-17 13:48 被阅读155次

    十、条件和布尔操作符(Conditional and Boolean Operators)

    条件和布尔操作会根据条件发射或变换 Observables,或者对他们做布尔运算。

    1,amb

    (1)基本介绍

    • 当传入多个 Observablesamb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。并忽略掉其他的 Observables

    (2)使用样例

    let disposeBag = DisposeBag()
     
    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)
    

    运行结果如下:

    2,takeWhile

    (1)基本介绍

    • 该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。

    (2)使用样例

    let disposeBag = DisposeBag()
     
    Observable.of(2, 3, 4, 5, 6)
        .takeWhile { $0 < 4 }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
    

    运行结果如下:

    3,takeUntil

    (1)基本介绍

    • 除了订阅源 Observable 外,通过 takeUntil 方法我们还可以监视另外一个 Observable, 即 notifier
    • 如果 notifier 发出值或 complete 通知,那么源 Observable 便自动完成,停止发送事件。

    (2)使用样例

    let disposeBag = DisposeBag()
     
    let source = PublishSubject<String>()
    let notifier = PublishSubject<String>()
     
    source
        .takeUntil(notifier)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
     
    source.onNext("a")
    source.onNext("b")
    source.onNext("c")
    source.onNext("d")
     
    //停止接收消息
    notifier.onNext("z")
     
    source.onNext("e")
    source.onNext("f")
    source.onNext("g")
    

    运行结果如下:

    4,skipWhile

    (1)基本介绍

    • 该方法用于跳过前面所有满足条件的事件。
    • 一旦遇到不满足条件的事件,之后就不会再跳过了。

    (2)使用样例

    let disposeBag = DisposeBag()
     
    Observable.of(2, 3, 4, 5, 6)
        .skipWhile { $0 < 4 }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
        }
    }
    

    运行结果如下:

    5,skipUntil

    (1)基本介绍

    • 同上面的 takeUntil 一样,skipUntil 除了订阅源 Observable 外,通过 skipUntil方法我们还可以监视另外一个 Observable, 即 notifier
    • takeUntil 相反的是。源 Observable 序列事件默认会一直跳过,直到 notifier 发出值或 complete 通知。

    (2)使用样例

    let disposeBag = DisposeBag()
     
    let source = PublishSubject<Int>()
    let notifier = PublishSubject<Int>()
     
    source
        .skipUntil(notifier)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
     
    source.onNext(1)
    source.onNext(2)
    source.onNext(3)
    source.onNext(4)
    source.onNext(5)
     
    //开始接收消息
    notifier.onNext(0)
     
    source.onNext(6)
    source.onNext(7)
    source.onNext(8)
     
    //仍然接收消息
    notifier.onNext(0)
     
    source.onNext(9)
    

    运行结果如下:

    RxSwift使用详解系列
    原文出自:www.hangge.com转载请保留原文链接

    相关文章

      网友评论

        本文标题:Swift - RxSwift的使用详解10(条件和布尔操作符:

        本文链接:https://www.haomeiwen.com/subject/pxerfftx.html