2016-10-12 22 views
6

Tôi muốn hủy đăng ký khỏi Quan sát trong RxSwift. Để làm điều này tôi đã sử dụng để thiết lập dùng một lần để nil. Nhưng có vẻ như với tôi rằng sau khi cập nhật lên RxSwift 3.0.0-beta.2 thủ thuật này không làm việc và tôi không thể bỏ đăng ký khỏi Quan sát:Làm thế nào để hủy đăng ký khỏi Quan sát trong RxSwift?

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

func setDisposable(){ 
    cancellableDisposeBag = DisposeBag() 
} 

func cancelDisposable(){ 
    cancellableDisposeBag = nil 
} 

Vì vậy, có thể ai đó có thể giúp tôi làm thế nào để bỏ đăng ký từ một cách chính xác Quan sát ?

+0

xem http://stackoverflow.com/questions/38969328/manually-disposing-a-disposebag-in-rxswift –

+0

Hãy xem https://github.com/ReactiveX/RxSwift/blob/master/Documentation /GettingStarted.md#disposing. Những gì bạn đề cập đến âm thanh như một lỗi. Có thể tốt hơn để báo cáo vấn đề này tại https://github.com/ReactiveX/RxSwift/issues – courteouselk

Trả lời

11

Nói chung, thực tiễn tốt là loại bỏ tất cả các đăng ký của bạn trong DisposeBag để khi đối tượng của bạn chứa đăng ký của bạn cũng bị phân phối lại.

let disposeBag = DisposeBag() 

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

nhưng nếu bạn có một đăng ký mà bạn muốn giết trước mặt bạn chỉ cần gọi vứt bỏ() trên nó khi bạn muốn quá

như thế này:

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

Bất cứ lúc nào bạn có thể gọi đây là và hủy đăng ký.

disposable.dispose() 

Nhưng lưu ý khi bạn làm như vậy, bạn có trách nhiệm giải quyết vấn đề này.

+1

Bạn không thể làm cả hai? (Thêm nó vào một túi vứt bỏ trong trường hợp nó không được deallocated và cũng có khả năng vứt bỏ nó bên trong khối tùy thuộc vào logic) – shim

Các vấn đề liên quan