2016-10-12 14 views
6

मैं आरएक्सस्विफ्ट में ऑब्जर्जेबल से सदस्यता समाप्त करना चाहता हूं। ऐसा करने के लिए मैं डिस्पोजेबल को शून्य पर सेट करता था। लेकिन मुझे लगता है कि RxSwift को 3.0.0-beta.2 को अद्यतन करने के बाद यह चाल काम नहीं करता है और मैं प्रत्यक्ष से सदस्यता समाप्त नहीं कर सकते हैं:RxSwift में Observable से सदस्यता कैसे प्राप्त करें?

//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

आम तौर पर एक डिस्पोजेबैग में आपकी सभी सदस्यता को बाहर करना अच्छा अभ्यास है, इसलिए जब आपकी ऑब्जेक्ट में आपकी सदस्यता शामिल होती है तो वे भी समाप्त हो जाते हैं।

let disposeBag = DisposeBag() 

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

लेकिन आप एक सदस्यता आप जब आप भी चाहते हैं

इस तरह से पहले हाथ तो आप बस फोन निपटान (इस पर) को मारने के लिए चाहते हैं, तो:

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

जब भी आप इस कॉल कर सकते हैं विधि और सदस्यता रद्द करें।

disposable.dispose() 

लेकिन जब आप इसे ऐसा करते हैं तो जागरूक रहें कि इसे अस्वीकार करने की आपकी ज़िम्मेदारी है।

+1

पर किसी समस्या के रूप में रिपोर्ट करने के लिए बेहतर हो सकता है आप दोनों नहीं कर सकते हैं? (इसे डिस्पोजेक्ट बैग में जोड़ें यदि इसे हटाया नहीं जाता है और तर्क के आधार पर ब्लॉक के अंदर संभावित रूप से इसका निपटान भी किया जाता है) – shim

संबंधित मुद्दे