iOS RXSwift 5.16
zip
通过一个函数将多个 Observables
的元素组合起来,然后将每一个组合的结果发出来
zip 操作符将多个(最多不超过8个) Observables
的元素通过一个函数组合起来,然后将这个组合的结果发出来。它会严格的按照序列的索引数进行组合。例如,返回的 Observable
的第一个元素,是由每一个源 Observables
的第一个元素组合出来的。它的第二个元素 ,是由每一个源 Observables
的第二个元素组合出来的。它的第三个元素 ,是由每一个源 Observables
的第三个元素组合出来的,以此类推。它的元素数量等于源 Observables
中元素数量最少的那个。
演示
let disposeBag = DisposeBag()
let first = PublishSubject<String>()
let second = PublishSubject<String>()
Observable.zip(first, second) { $0 + $1 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
first.onNext("1")
second.onNext("A")
first.onNext("2")
second.onNext("B")
second.onNext("C")
second.onNext("D")
first.onNext("3")
first.onNext("4")
输出结果:
1A
2B
3C
4D
withLatestFrom
将两个 Observables
最新的元素通过一个函数组合起来,当第一个 Observable
发出一个元素,就将组合后的元素发送出来
withLatestFrom 操作符将两个 Observables
中最新的元素通过一个函数组合起来,然后将这个组合的结果发出来。当第一个 Observable
发出一个元素时,就立即取出第二个 Observable
中最新的元素,通过一个组合函数将两个最新的元素合并后发送出去。
演示
当第一个 Observable
发出一个元素时,就立即取出第二个 Observable
中最新的元素,然后把第二个 Observable
中最新的元素发送出去。
let disposeBag = DisposeBag()
let firstSubject = PublishSubject<String>()
let secondSubject = PublishSubject<String>()
firstSubject
.withLatestFrom(secondSubject)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
firstSubject.onNext("🅰️")
firstSubject.onNext("🅱️")
secondSubject.onNext("1")
secondSubject.onNext("2")
firstSubject.onNext("🆎")
输出结果:
2
当第一个 Observable
发出一个元素时,就立即取出第二个 Observable
中最新的元素,将第一个 Observable
中最新的元素 first
和第二个 Observable
中最新的元素second
组合,然后把组合结果 first+second
发送出去。
let disposeBag = DisposeBag()
let firstSubject = PublishSubject<String>()
let secondSubject = PublishSubject<String>()
firstSubject
.withLatestFrom(secondSubject) {
(first, second) in
return first + second
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
firstSubject.onNext("🅰️")
firstSubject.onNext("🅱️")
secondSubject.onNext("1")
secondSubject.onNext("2")
firstSubject.onNext("🆎")
输出结果:
🆎2
window
将 Observable
分解为多个子 Observable
,周期性的将子 Observable
发出来
window 操作符和 buffer 十分相似,buffer 周期性的将缓存的元素集合发送出来,而 window 周期性的将元素集合以 Observable
的形态发送出来。
buffer 要等到元素搜集完毕后,才会发出元素序列。而 window 可以实时发出元素序列。
using
创建一个可被清除的资源,它和 Observable
具有相同的寿命
通过使用 using 操作符创建 Observable
时,同时创建一个可被清除的资源,一旦 Observable
终止了,那么这个资源就会被清除掉了。