可观察数组,其中每个的输出是下一个的输入

时间:2017-11-01 15:23:51

标签: swift reactive-programming rx-swift

我正在尝试使用RxSwift对多个数据源执行操作。但是,我不知道如何完成以下任务。

我有一个observabless数组,其中每个的输出应该是下一个的输入。所以,我想做一些事情,得到第一个可观察的,等待结果并将其传递给下一个,一直到数组的末尾并返回一个最终值。

这可能吗?提前谢谢。

***更新:好的,我会根据要求提供更具体的信息。

我在数组中使用的'observable'是自定义的。我使用一个返回Observable.create { ... }的函数。在闭包内部,我运行一个异步操作,转换值,然后在完成之前将结果发送给观察者。结果值必须传递给下一个observable,依此类推到数组中的最后一个observable以获得最终值。

observable可能会发送多个值,但它们必须像一条装配线一样从一个observable传递到另一个observable。

1 个答案:

答案 0 :(得分:0)

很难确切地知道你要求的是什么,因为Observable没有确切的输入,但我认为这是一个常见的问题。

您可能正在寻找concatreduce运算符的组合,这些运算符允许您累积Observable发出的值中的数据。请参阅ReactiveX's documentation for Mathematical and Aggregate Operators

希望这可以让你开始:

// "I have an array of observables..."
let one = Observable.deferred { Observable.just(1) }
let two = Observable.deferred { Observable.just(2) }
let observables = [one, two]

// "the output of each, should be the input of the next"
// this is problematic, because observables do not strictly have inputs.
let resultsFromEach = Observable.concat(observables)

resultsFromEach
    .reduce(0) { result, next in
        result + 1
    }
    .debug("result")
    .subscribe()