Conditional and Boolean Operators
阿新 • • 發佈:2018-12-25
Amb
在多個源 Observables 中, 取第一個發出元素或產生事件的 Observable,然後只發出它的元素
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 是否發射一個特定的值
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 為空, 發出預設值
Observable.of().ifEmpty(default: 0)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
/*
0
*/
SkipUntil
跳過 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)
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 中頭幾個元素,直到元素的判定為否
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 產生事件後發出的那部分元素
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 序列的每一個值是否滿足給定的條件。 當第一個不滿足條件的值出現時,它便自動完成
let disposeBag = DisposeBag()
Observable.of(2, 3, 4, 5, 6)
.takeWhile { $0 < 4 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
/*
2
3
*/