RxSwift:除了使用回调之外,如何建立可观察的函数调用链?

时间:2018-05-24 04:08:04

标签: swift asynchronous rx-swift

我试图解决异步顺序问题,例如:

有一个原始数据'在myclass中,我想对它执行一些顺序操作:operationA,operationB和operationC:

operationA接受OriginalData并返回outputA,完成后,operationB应将outputA作为输入并返回outputB,然后移到operationC ..

我所做的就是使用回调:

// pseudocode
class Myclass {
    func operationA(inputA, callback: operationB)
    func operationB(inputB, callback: operationC)
    ..
}

结果,如果使用回调,它将导致回调地狱和很多麻烦。我变成了RxSwift,但不知道如何使用RxSwift来解决它。

(P.S我已经阅读过RxSwift的官方文件,但仍然无法让我的想法清楚。最值得赞赏的是你的帮助!)

1 个答案:

答案 0 :(得分:1)

我认为您可以使用PublishSubject解决此问题,如下所示:

let operationA = PublishSubject<String>()
let operationB = PublishSubject<String>()
let operationC = PublishSubject<String>()
let disposeBag = DisposeBag()

operationA.asObserver()
    .subscribe(onNext:{element in
        operationB.onNext(element)
    })
    .disposed(by: disposeBag)

operationB.asObserver()
    .subscribe(onNext:{element in
        operationC.onNext(element)
    })
    .disposed(by: disposeBag)

operationC.asObserver()
    .subscribe(onNext:{element in
        print(element)
    })
    .disposed(by: disposeBag)


operationA.onNext("A")