【发布时间】:2019-12-30 15:45:34
【问题描述】:
我有两个订阅:a 和 b。一旦b“触发”,我需要取消(取消订阅)a。
订阅在代码的不同部分定义,目前看起来像这样:
private let _bag = DisposeBag()
func fA() {
// ....
observableA.bind(to: mapView.rx.animate).disposed(by: _bag)
// ....
}
func fB() {
// ....
observableB.subscribe(onNext: { [unowned self] data in
self.process(data)
// I need to unsubscribe from observableA now
}).disposed(by: _bag)
// ....
}
实现它的最佳方法是什么?我可以想到两种方法:
1) 使用专用包:
private let _bag = DisposeBag()
private var _ABAG = DisposeBag()
func fA() {
// ....
observableA.bind(to: mapView.rx.animate).disposed(by: _ABAG)
// ....
}
func fB() {
// ....
observableB.subscribe(onNext: { [unowned self] data in
self.process(data)
self._ABAG = DisposeBag()
}).disposed(by: _bag)
// ....
}
2) 手动退订:
private let _bag = DisposeBag()
private var _disposableA: Disposable?
func fA() {
// ....
_disposableA = observableA.bind(to: mapView.rx.animate)
// ....
}
func fB() {
// ....
observableB.subscribe(onNext: { [unowned self] data in
self.process(data)
self._disposableA?.dispose()
}).disposed(by: _bag)
// ....
}
在健壮性、优雅性等方面,哪种方式更好?还是有更好的办法?
【问题讨论】:
标签: ios swift observable rx-swift