我是 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()
这仍然会导致多个订阅,我该如何解决这个
你误解了问题。
viewDidLoad
方法只在一个对象上被调用一次。无需更换您的垃圾袋。
您运行多个订阅的原因是因为您在多个上下文中使用相同的 Observable。因此,例如,您订阅了 observable 两次,或者您订阅了它 and 在另一个运算符(如 combineLatest 或 withLatestFrom)中使用它。这些导致第二次订阅。
解决方案是在添加任何订阅之前调用
.share()
。这样,单独的订阅将共享副作用,而不是每个订阅都有自己的副作用。