Как мне объединить наблюдаемые результаты цикла с массивом в RxSwift? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть простой поток с числами.Я хочу сделать некоторые математические операции, а затем последовательно собирать результаты в массиве.Как я могу это сделать?

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 Ответ

1 голос
/ 28 марта 2019
let arrayObservable = obs.reduce([]) { acc, element in acc + [element] }

Reduce начнется с пустого массива и добавит каждый элемент потока в массив.Затем он выдаст только одно .next событие после завершения источника obs с результатом накопления.


Другой вариант - использовать buffer оператор.Но имейте в виду, что результирующий массив будет содержать только определенное количество элементов и что он также будет излучать каждый timeSpan, даже если источник не излучал ни одного элемента.

...