Observable이 배출하는 항목 전체를 대상으로 동작하는 연산자들 - Concat, Reduce
1. Concat
- Concat — 두 개 이상의 Observable들이 항목을 발행할 때 Observable 순서대로 배출하는 항목들을 하나의 Observable 배출로 연이어 배출한다
구현부
public func concat<Source: ObservableConvertibleType>(_ second: Source) -> Observable<Element> where Source.Element == Element {
Observable.concat([self.asObservable(), second.asObservable()])
}
예시
let fruits = Observable.from(["🍏", "🍎"])
let animals = Observable.from(["🐶", "🐱"])
Observable.concat([fruits, animals])
.subscribe{ print($0) }
// next(🍏)
// next(🍎)
// next(🐶)
// next(🐱)
// completed
2. Reduce
- Reduce — Observable이 배출한 항목에 함수를 순서대로 적용하고 함수를 연산한 후 최종 결과를 발행한다
- 중간결과와 최종결과가 모두 필요하면 scan 연산자
- 최종결과만 필요하면 reduce 연산자
구현부
public func reduce<A>(_ seed: A, accumulator: @escaping (A, Element) throws -> A)
-> Observable<A> {
Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: { $0 })
}
예시
let source = Observable.range(start: 1, count: 5)
print("== scan")
source.scan(0, accumulator: +)
.subscribe { print($0) }
.disposed(by: bag)
print("== reduce")
source.reduce(0, accumulator: +)
.subscribe{ print($0) }
.disposed(by: bag)
== scan
// next(1)
// next(3)
// next(6)
// next(10)
// next(15)
// completed
== reduce
// next(15)
// completed
+) scan 연산자란? -> [RxSwift] Operators - 변환(2)
출처 : http://reactivex.io/documentation/ko/operators.html
'RxSwift' 카테고리의 다른 글
[Rxswift] Operators - To (0) | 2021.12.14 |
---|---|
[Rxswift] Operators - 연결(9) (0) | 2021.12.14 |
[RxSwift] Operators - 조건과 Boolean(7) (0) | 2021.11.29 |
[RxSwift] Operators - 유틸리티(6) (0) | 2021.11.29 |
[RxSwift] Operators - 오류 처리(5) (0) | 2021.11.20 |
댓글