Rxswift:处理订阅不是处理

问题描述 投票:0回答:1

我是 Rxswift 的新手,我遇到了一个问题

我有一个 Observable,我在 viewDidLoad 中执行绑定\订阅,屏幕被重复使用,因此每次 viewDidload 运行时都会发生订阅,因此我有两个订阅,然后当事件从流发送时,订阅运行两次.我想要发生的是,当 viewDidload 运行以取消现有订阅时,我希望这将阻止多个订阅,并且当它发送时它不会运行两次。

``func bind() { // 这调用了 viewDidLoad

disposeBag = DisposeBag()

Observable
.skip(1)
.distinctUntilChanged()
.subscribe(onNext: { [weak self] visibility in
  self?.delegate?.handleChange(visibility)
 })
  .disposed(by: disposeBag)``

所以 iv 尝试的是重置 disposeBag 以便它取消现有订阅并再次订阅,但是当此行运行时订阅不会处理

disposeBag = DisposeBag()
这仍然会导致多个订阅,我该如何解决这个

ios swift rx-swift
1个回答
0
投票

你误解了问题。

viewDidLoad
方法只在一个对象上被调用一次。无需更换您的垃圾袋。

您运行多个订阅的原因是因为您在多个上下文中使用相同的 Observable。因此,例如,您订阅了 observable 两次,或者您订阅了它 and 在另一个运算符(如 combineLatest 或 withLatestFrom)中使用它。这些导致第二次订阅。

解决方案是在添加任何订阅之前调用

.share()
。这样,单独的订阅将共享副作用,而不是每个订阅都有自己的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.