본문 바로가기
RxSwift

[RxSwift] Operators - 수학과 집계(8)

by 고고 2021. 11. 29.

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

 

ReactiveX - Operators

연산자 소개 ReactiveX를 지원하는 언어 별 구현체들은 다양한 연산자들을 제공하는데, 이 중에는 공통적으로 제공되는 연산자도 있지만 반대로 특정 구현체에서만 제공하는 연산자들도 존재한다

reactivex.io

 

'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

댓글