devxoul
3/9/2017 - 8:01 PM

FlatScan.swift

extension ObservableType {
  typealias Accumulator<A> = (A, E) -> Observable<A>

  func flatScan<A>(_ seed: A, accumulator: @escaping Accumulator<A>) -> Observable<A> {
    return self
      .scan(Observable<A>.just(seed)) { observable, current -> Observable<A> in
        observable.flatMap { previous in
          accumulator(previous, current)
        }
      }
      .flatMap { $0 }
  }
}