前言
本章中主要介绍数学和一些综合运算符,操作是作用于整个观察序列的元素
Mathematical and Aggregate Operators
-
toArray
将观察序列多个元素转换为单个元素的序列,这个元素就是源序列元素的数组集合
example("toArray") {
let disposeBag = DisposeBag()
Observable.range(start: 1, count: 10)
.toArray()
.subscribe { print($0) }
.disposed(by: disposeBag)
}
// 控制台打印的结果:
--- toArray example ---
next([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
completed
-
reduce
类似于scan,有一个种子值和一个操作符,对种子值作为第一个值与第一个元素进行计算,结果作为新的种子值与第二个元素进行计算。与scan不用的是,reduce的是取最后一个计算结果作为新的序列的元素
example("reduce") {
let disposeBag = DisposeBag()
Observable.of(10, 100, 1000)
.reduce(1, accumulator: +)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
}
// 控制台打印的结果:
--- reduce example ---
1111
-
concat
用于多个序列的事件元素的链接,按照顺序的方式进行连接,当一个序列的元素连接完毕并结束后在链接下一个序列
本文作者注:我所理解的结束,应该是序列发出Complete事件或者Error事件,并且在官方实例中子序列用的是BehaviorSubject,仅发出最近的元素,所以在比如A序列在前,B序列在后,B发出b1, b2两个元素,然后A Complete,由于b2是
最近
的元素,所以在链接的时候b1就会被忽略了*
example("concat") {
let disposeBag = DisposeBag()
let subject1 = BehaviorSubject(value: "🍎")
let subject2 = BehaviorSubject(value: "🐶")
let variable = Variable(subject1)
variable.asObservable()
.concat()
.subscribe { print($0) }
.disposed(by: disposeBag)
subject1.onNext("🍐")
subject1.onNext("🍊")
variable.value = subject2
subject2.onNext("I would be ignored")
subject2.onNext("🐱")
subject1.onCompleted()
subject2.onNext("🐭")
}
// 控制台打印的结果:
--- concat example ---
next(🍎)
next(🍐)
next(🍊)
next(🐱)
next(🐭)
网友评论