2016-03-09 15 views
12

'da gözlemlenebilir bir kereliğine imha etmek için doğru yolu Gözlemlemek için sadece bir kez başlatmak istiyorum. Dokümanlar şu belirtiler:RxSwift

Atık torbaları veya alınıyorKullanıcı, kaynakların temizlendiğinden emin olmanın sağlam bir yoludur. Dizilerin sonlu zamanda sona ermesine rağmen, bunları üretimde kullanmanızı öneririz. Sadece bir olaydan sonra

Benim gözlemlenebilir son bulur

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

Ben sadece bir kez ve tam koşmak istiyorum, bu gözlemlenebilir için abonelerin iptal ilgilenmiyordu söyle. Çalışmanın kendisi tamamlandığında, bu gözlemlenebilirliğin yaşam döngüsünün bitmesini istiyorum. Anlamıyla görebileceğim disposeBag için iyi bir aday yoktur. takeUntil ayrıca bir 'etkinlik' bekliyor ve görebileceğim iyi bir şey yok.

_ = observeable.subscribeNext { ... } 

bunu yapmanın bir yolu, yoksa kullanması gereken farklı bir paradigma var mı:

Şu anda sadece tek kullanımlık atmadan uyarıyı çözmek?

cevap

19

Hem DiposeBag ve takeUntil.Completed/.Error olayını almak için bir abonelik önce iptal etmek için kullanılır.

Bir Observable tamamlandığında, aboneliği yönetmek için kullanılan tüm kaynaklar otomatik olarak yok edilir.

RxSwift 2.2 itibariyle Sen olayı yönlendirme sonra, ya bir .Error veya .Completed olayı alırken AnonymousObservableSink çağrılar kendi üzerine elden Bak nasıl 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() 
     } 
    } 
} 

bu davranışın uygulamasının bir örneğini görmek mümkün. Sonuç olarak, kullanım durumunuz için, _ = gitmek için bir yoldur.

İlgili konular