RxSwift官方使用示例之<数学和聚合操作符>

avatar
iOS 开发工程师 @抖音视界有限公司

本文是示例主要来自于官方的实例代码,可从这里下载 ,实例代码稍有改动。其中的图片来自于reactivex.io/

本文主要的作用是查看实例代码并查看对应实例代码的效果,不需要运行项目

操作符目录

debug 操作符会打印所有的 subscriptions, events, disposals

toArray

将一个 Observable 序列转换为一个数组,将该数组作为一个新的单元素 Observable 序列发出,然后终止

let disposeBag = DisposeBag()
        
Observable.range(start: 1, count: 10)
    .toArray()
    .subscribe {
        // 注意返回的是 Result 对象
        switch $0 {
        case .success(let result):
            print(result)
        case .failure:
            print("Error")
        }
    }
    .disposed(by: disposeBag)

打印

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

reduce

从初始种子值开始,然后对 Observable 序列发出的所有元素应用累加器闭包,并将聚合结果作为单元素 Observable 序列返回

let disposeBag = DisposeBag()
    
Observable.of(10, 100, 1000)
    .reduce(1, accumulator: +)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

打印

1111

注意与 scan 操作符结合理解,scan 会输出每一次的中间结果,而 reduce 只输出最终的结果,叫单元素Observable 序列

concat

以顺序的方式连接来自 Observable 序列的内部 Observable 序列的元素,等待每个序列成功终止,然后再从下一个序列发出元素 image.png

let disposeBag = DisposeBag()

let o1 = PublishSubject<Int>()
let o2 = PublishSubject<Int>()

o1.concat(o2)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

o1.onNext(1)
o1.onNext(1)
o1.onNext(1)
o1.onCompleted()

o2.onNext(2)
o2.onNext(2)
o2.onCompleted()

打印

1
1
1
2
2