【问题标题】:How do I combine observable loop results to array in RxSwift?如何将可观察循环结果组合到 RxSwift 中的数组?
【发布时间】:2019-08-18 23:23:30
【问题描述】:

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

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 组合成一个数组。

【问题讨论】:

    标签: rx-swift reactive rx-cocoa


    【解决方案1】:
    let arrayObservable = obs.reduce([]) { acc, element in acc + [element] }
    

    Reduce 将从一个空数组开始,并将流的每个元素附加到数组中。在源 obs 完成后,它将只发出一个 .next 事件,并带有累积的结果。


    另一种选择是使用buffer 运算符。但请记住,生成的数组最多只能包含一定数量的元素,并且它还会在每个 timeSpan 发出一次,即使 source 没有发出任何项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多