我是Rxswift的新手,我面临着一个问题
我有一个Observable,我在viewDidLoad中进行绑定\订阅,屏幕被重用,每次viewDidload运行时都会发生订阅,因此我有两个订阅,然后当事件从流中发送时,预订运行两次。我希望发生的是,当viewDidload运行取消现有的订阅,我希望这将防止多个订阅,当一个甚至它发送了它不会运行两次。
``func bind(){ // this调用viewDidLoad
disposeBag = DisposeBag()
Observable
.skip(1)
.distinctUntilChanged()
.subscribe(onNext: { [weak self] visibility in
self?.delegate?.handleChange(visibility)
})
.disposed(by: disposeBag)``
iv尝试重置disposeBag,以便取消现有订阅并再次订阅,但当该行运行disposeBag = DisposeBag()
时,订阅不会释放,这仍然会导致多个订阅,我该如何解决此问题
1条答案
按热度按时间mwngjboj1#
你误解了这个问题。
viewDidLoad
方法只在一个对象上被调用一次。没有必要替换你的dispose包。你运行多个订阅的原因是因为你在多个上下文中使用同一个Observable。例如,你订阅了两次observable,或者你订阅了它 * 并在另一个操作符中使用它(如combineLatest或withLatestFrom)。这些都会导致第二次订阅。
解决方案是在添加任何订阅之前调用
.share()
。这样,单独的订阅将共享副作用,而不是每个订阅都有自己的副作用。