StartWith
方法會在 Observable 序列開始之前插入一些事件元素。即發(fā)出事件消息之前,會先發(fā)出這些預先插入的事件消息。
let disposeBag = DisposeBag()
Observable.of("2", "3")
.startWith("1")
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// 1,2,3
merge
該方法可以將多個(兩個或兩個以上的)Observable 序列合并成一個 Observable序列。
let disposeBag = DisposeBag()
let subject1 = PublishSubject<Int>()
let subject2 = PublishSubject<Int>()
Observable.of(subject1, subject2)
.merge()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
subject1.onNext(20)
subject1.onNext(40)
subject1.onNext(60)
subject2.onNext(1)
subject1.onNext(80)
subject1.onNext(100)
subject2.onNext(1)
// 20,40,60,1,80,100,1
zip
該方法可以將多個(兩個或兩個以上的)Observable 序列壓縮成一個 Observable 序列。
而且它會等到每個 Observable 事件一一對應地湊齊之后再合并。
let disposeBag = DisposeBag()
let subject1 = PublishSubject<Int>()
let subject2 = PublishSubject<String>()
Observable.zip(subject1, subject2) {
"\($0)\($1)"
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
subject1.onNext(1)
subject2.onNext("A")
subject1.onNext(2)
subject2.onNext("B")
subject2.onNext("C")
subject2.onNext("D")
subject1.onNext(3)
subject1.onNext(4)
subject1.onNext(5)
// 1A,2B,3C,4D
combineLatest
該方法同樣是將多個(兩個或兩個以上的)Observable 序列元素進行合并。
但與 zip 不同的是,每當任意一個 Observable 有新的事件發(fā)出時,它會將每個 Observable 序列的最新的一個事件元素進行合并。
let disposeBag = DisposeBag()
let subject1 = PublishSubject<String>()
let subject2 = PublishSubject<String>()
subject1.withLatestFrom(subject2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
subject1.onNext("A")
subject2.onNext("1")
subject1.onNext("B")
subject1.onNext("C")
subject2.onNext("2")
subject1.onNext("D")
// 1,2,2