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
*/