How to unsubscribe from Observable in RxSwift?

2019-06-16 05:47发布

问题:

I want to unsubscribe from Observable in RxSwift. In order to do this I used to set Disposable to nil. But it seems to me that after updating to RxSwift 3.0.0-beta.2 this trick does not work and I can not unsubscribe from Observable:

//This is what I used to do when I wanted to unsubscribe
var cancellableDisposeBag: DisposeBag?

func setDisposable(){
    cancellableDisposeBag = DisposeBag()
}

func cancelDisposable(){
    cancellableDisposeBag = nil
}

So may be somebody can help me how to unsubscribe from Observable correctly?

回答1:

In general it is good practice to out all of your subscriptions in a DisposeBag so when your object that contains your subscriptions is deallocated they are too.

let disposeBag = DisposeBag()

func setupRX() {
   button.rx.tap.subscribe(onNext : { _ in 
      print("Hola mundo")
   }).addDisposableTo(disposeBag)
}

but if you have a subscription you want to kill before hand you simply call dispose() on it when you want too

like this:

let disposable = button.rx.tap.subcribe(onNext : {_ in 
   print("Hallo World")
})

Anytime you can call this method and unsubscribe.

disposable.dispose()

But be aware when you do it like this that it your responsibility to get it deallocated.



回答2:

Follow up with answer to Shim's question

let disposeBag = DisposeBag()
let subscription: Disposable?

func setupRX() {
    let subscription = button.rx.tap.subscribe(onNext : { _ in 
        print("Hola mundo")
    })
    subscription?.addDisposableTo(disposeBag)
}

You can still call this method later

subscription?.dispose()