1. 程式人生 > >Conditional and Boolean Operators

Conditional and Boolean Operators

Amb

在多個源 Observables 中, 取第一個發出元素或產生事件的 Observable,然後只發出它的元素

amb.png

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) /* 1 2 3 */

Contains

判定一個 Observable 是否發射一個特定的值

contains.c.png

Observable.of("2", "30", "22", "5", "60", "1").subscribe(onNext: {
    print($0.contains
("22")) }).disposed(by: disposeBag) /* false false true false false false */

DefaultIfEmpty

如果 Observables 為空, 發出預設值

defaultIfEmpty.c.png

Observable.of().ifEmpty(default: 0)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)

/*
0
*/

SkipUntil

跳過 Observable 中頭幾個元素,直到另一個 Observable 發出一個元素

螢幕快照 2018-06-03 下午10.33.21.png

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)

/*
6
7
8
9
*/

SkipWhile

跳過 Observable 中頭幾個元素,直到元素的判定為否

skipWhile.c.png

let disposeBag = DisposeBag()

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

/*
4
5
6
*/

TakeUntil

忽略掉在第二個 Observable 產生事件後發出的那部分元素

螢幕快照 2018-06-03 下午10.35.02.png

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")

/*
a
b
c
d
*/

TakeWhile

該方法依次判斷 Observable 序列的每一個值是否滿足給定的條件。 當第一個不滿足條件的值出現時,它便自動完成

takeWhile.c.png

let disposeBag = DisposeBag()

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

/*
2
3
*/