2016-03-09 7 views
12

में एक-एक अवलोकन करने का उचित तरीका मेरे पास एक अवलोकन है कि मैं केवल एक बार लात मारना चाहता हूं। दस्तावेज़ कहते हैं:RxSwift

निपटान बैग का उपयोग करना या ऑपरेटर तक लेना सुनिश्चित करना संसाधनों को साफ करने का एक मजबूत तरीका है। हम उत्पादन में उनका उपयोग करने की सलाह देते हैं भले ही अनुक्रम सीमित समय में समाप्त हो जाएंगे।

सिर्फ एक घटना के बाद मेरे नमूदार समाप्त

let observable = Observable.create() { observer in 
    webservice.makeHTTPRequestWithCompletionBlock { 
    if something { 
     observer.on(.Next(...)) 
     observer.onCompleted() 
    } else { 
     observer.on(.Error(...)) 
    } 
    } 
} 

मैं इस नमूदार के लिए ग्राहकों को रद्द करने में कोई दिलचस्पी नहीं थी कहो, मैं सिर्फ यह एक बार और पूर्ण चलाना चाहते हैं। मैं इस अवलोकन के जीवन चक्र को समाप्त करना चाहता हूं जब कार्य स्वयं पूरा हो जाए। मतलब है कि निपटान के लिए कोई अच्छा उम्मीदवार नहीं है जिसे मैं देख सकता हूं। लेने के लिए एक 'घटना' की भी उम्मीद नहीं है, और कोई अच्छा नहीं है जिसे मैं देख सकता हूं।

_ = observeable.subscribeNext { ... } 

वहाँ यह करने के लिए एक तरह से, या एक अलग प्रतिमान है कि मैं का उपयोग करना चाहिए है:

अभी मैं सिर्फ डिस्पोजेबल दूर फेंक कर चेतावनी को हल?

उत्तर

19

DiposeBag और takeUntil दोनों .Completed/.Error घटना प्राप्त करने के लिए एक सदस्यता पहले रद्द करने के लिए उपयोग किया जाता है।

जब Observable पूरा हो जाता है, तो सब्सक्रिप्शन प्रबंधित करने के लिए उपयोग किए जाने वाले सभी संसाधन स्वचालित रूप से निपटाए जाते हैं।

RxSwift 2.2 के रूप में, आप AnonymousObservable.swift

func on(event: Event<E>) { 
    switch event { 
    case .Next: 
     if _isStopped == 1 { 
      return 
     } 
     forwardOn(event) 
    case .Error, .Completed: 
     if AtomicCompareAndSwap(0, 1, &_isStopped) { 
      forwardOn(event) 
      dispose() 
     } 
    } 
} 

में इस व्यवहार के लिए कार्यान्वयन का एक उदाहरण गवाह देखें कैसे AnonymousObservableSink कॉल पर ही निपटाने जब या तो एक .Error या एक .Completed घटना प्राप्त करने, घटना अग्रेषण के बाद कर सकते हैं।

निष्कर्ष में, आपके उपयोग के मामले के लिए, _ = जाने का तरीका है।

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