web-dev-qa-db-ja.com

RxSwiftでObservableからの退会方法

RxSwiftでObservableの登録を解除したい。これを行うために、私はDisposableをnilに設定するために使用しました。しかし、RxSwift 3.0.0-beta.2に更新した後、このトリックは機能せず、Observableの登録を解除できないようです。

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

func setDisposable(){
    cancellableDisposeBag = DisposeBag()
}

func cancelDisposable(){
    cancellableDisposeBag = nil
}

では、誰かがObservableから正しくサブスクライブを解除する方法を教えてくれませんか?

11
Marina

一般に、DisposeBagですべてのサブスクリプションを削除することをお勧めします。これにより、サブスクリプションを含むオブジェクトの割り当てが解除されると、サブスクリプションも解放されます。

let disposeBag = DisposeBag()

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

しかし、あなたが事前に殺したいサブスクリプションを持っているなら、あなたもあなたが望むときにそれに対して単にdispose()を呼び出すだけです

このような:

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

いつでもこのメソッドを呼び出してサブスクライブを解除できます。

disposable.dispose()

ただし、このようにする場合は、割り当てを解除する責任があることに注意してください。

17
Daniel Poulsen

シムの質問への回答をフォローアップする

let disposeBag = DisposeBag()
let subscription: Disposable?

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

このメソッドは後で呼び出すことができます

subscription?.dispose()
3
Ted