前言
本章中主要介紹數(shù)學(xué)和一些綜合運(yùn)算符箍铭,操作是作用于整個(gè)觀察序列的元素
Mathematical and Aggregate Operators
-
toArray
將觀察序列多個(gè)元素轉(zhuǎn)換為單個(gè)元素的序列椎镣,這個(gè)元素就是源序列元素的數(shù)組集合
example("toArray") {
let disposeBag = DisposeBag()
Observable.range(start: 1, count: 10)
.toArray()
.subscribe { print($0) }
.disposed(by: disposeBag)
}
// 控制臺(tái)打印的結(jié)果:
--- toArray example ---
next([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
completed
-
reduce
類似于scan,有一個(gè)種子值和一個(gè)操作符状答,對種子值作為第一個(gè)值與第一個(gè)元素進(jìn)行計(jì)算,結(jié)果作為新的種子值與第二個(gè)元素進(jìn)行計(jì)算惊科。與scan不用的是,reduce的是取最后一個(gè)計(jì)算結(jié)果作為新的序列的元素
example("reduce") {
let disposeBag = DisposeBag()
Observable.of(10, 100, 1000)
.reduce(1, accumulator: +)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
}
// 控制臺(tái)打印的結(jié)果:
--- reduce example ---
1111
-
concat
用于多個(gè)序列的事件元素的鏈接授翻,按照順序的方式進(jìn)行連接孙咪,當(dāng)一個(gè)序列的元素連接完畢并結(jié)束后在鏈接下一個(gè)序列
本文作者注:我所理解的結(jié)束翎蹈,應(yīng)該是序列發(fā)出Complete事件或者Error事件男公,并且在官方實(shí)例中子序列用的是BehaviorSubject合陵,僅發(fā)出最近的元素澄阳,所以在比如A序列在前,B序列在后低剔,B發(fā)出b1, b2兩個(gè)元素肮塞,然后A Complete,由于b2是
最近
的元素枕赵,所以在鏈接的時(shí)候b1就會(huì)被忽略了*
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("??")
}
// 控制臺(tái)打印的結(jié)果:
--- concat example ---
next(??)
next(??)
next(??)
next(??)
next(??)