如何将可观察循环结果组合到 RxSwift 中的数组中?
How do I combine observable loop results to array in RxSwift?
我有一个包含数字的简单流。我想做一些数学运算,然后在数组中顺序收集结果。我该怎么做?
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 组合成一个数组。
let arrayObservable = obs.reduce([]) { acc, element in acc + [element] }
Reduce 将从一个空数组开始,并将流的每个元素附加到数组。然后它将只发出一个 .next
事件,在源 obs
完成后,累积的结果。
另一种选择是使用 buffer
运算符。但请记住,生成的数组最多只包含一定数量的元素,并且它也会每隔 timeSpan
发射一次,即使源没有发射任何项目。
我有一个包含数字的简单流。我想做一些数学运算,然后在数组中顺序收集结果。我该怎么做?
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 组合成一个数组。
let arrayObservable = obs.reduce([]) { acc, element in acc + [element] }
Reduce 将从一个空数组开始,并将流的每个元素附加到数组。然后它将只发出一个 .next
事件,在源 obs
完成后,累积的结果。
另一种选择是使用 buffer
运算符。但请记住,生成的数组最多只包含一定数量的元素,并且它也会每隔 timeSpan
发射一次,即使源没有发射任何项目。