如何将可观察到的循环结果组合到RxSwift中的数组?

时间:2019-03-28 08:48:02

标签: rx-swift reactive rx-cocoa

我有一个简单的数字流。我想做一些数学运算,然后按顺序在数组中收集结果。我该怎么办?

func test (number : Int) -> Observable<Int> {
        let obs2 = Observable<Int>.create { (obs) -> Disposable in
            obs.onNext(number + 10)
            return Disposables.create()
        }

        return obs2
    }

let obs = Observable.from([1,2,3,4]).flatMap { (item) -> Observable<Int> in
            self.test(number: item)
            }.map { (result) -> Int in
                return result
            }

//I want this: 
obs.subscribe(onNext : {[Int] in 
     ...
     ...
}

我无法将每个int合并到一个数组中。

1 个答案:

答案 0 :(得分:1)

let arrayObservable = obs.reduce([]) { acc, element in acc + [element] }

Reduce将以一个空数组开头,并将流的每个元素附加到该数组。然后,在源.next完成之后,它将仅发出一个obs事件,并累积结果。


另一种选择是使用buffer运算符。但是请记住,结果数组最多只能包含一定数量的元素,并且即使源未发出任何项目,它也会发出每个timeSpan