2016-10-12 7 views
6

Я хочу отказаться от подписки на Observable в RxSwift. Для этого я использовал для установки одноразового использования. Но мне кажется, что после обновления до 3.0.0 RxSwift-beta.2 этот трюк не работает, и я не могу отказаться от Observable:Как отписаться от Observable в RxSwift?

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

func setDisposable(){ 
    cancellableDisposeBag = DisposeBag() 
} 

func cancelDisposable(){ 
    cancellableDisposeBag = nil 
} 

Так может быть кто-то может помочь мне, как отказаться от Наблюдаемые правильно ?

+0

см. Это http://stackoverflow.com/questions/38969328/manually-disposing-a-disposebag-in-rxswift –

+0

Посмотрите на https://github.com/ReactiveX/RxSwift/blob/master/Documentation /GettingStarted.md#disposing. То, что вы упоминаете, звучит как ошибка. Возможно, лучше сообщить об этом как о проблеме на https://github.com/ReactiveX/RxSwift/issues – courteouselk

ответ

11

Как правило, это хорошая практика для всех ваших подписки в DisposeBag, поэтому, когда ваш объект, содержащий ваши подписки, освобождается, они тоже.

let disposeBag = DisposeBag() 

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

, но если у вас есть подписка вы хотите, чтобы убить, прежде чем руки вы просто вызываете Dispose() на нем, когда вы хотите слишком

так:

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

В любое время вы можете позвонить в этом метод и отписаться.

disposable.dispose() 

Но имейте в виду, когда вы делаете это так, что это ваша ответственность за его освобождение.

+1

Разве вы не можете сделать то и другое? (Добавьте его в папку для удаления в случае, если он не будет освобожден, а также потенциально удалит его внутри блока в зависимости от логики) – shim