How to unsubscribe from Observable in RxSwift?

Marina picture Marina · Oct 12, 2016 · Viewed 16.6k times · Source

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?

Answer

Daniel Poulsen picture Daniel Poulsen · Oct 13, 2016

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.