La forma adecuada de disponer de un observable único en RxSwift

Tengo un observable que solo quiero comenzar una vez. Los docs dicen:

El uso de bolsas desechables o el operador takeUntil es una manera robusta de garantizar que los resources se limpien. Recomendamos usarlos en producción incluso si las secuencias terminan en un time limitado.

Mi observable termina después de un solo evento

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

Digamos que no estaba interesado en cancelar los suscriptores a este observable, solo quiero que se ejecute una vez y se complete. Quiero que el ciclo de vida de este observable termine cuando el trabajo en sí esté completo. Lo que significa que no hay buenos candidatos para deshacerse de la basura que puedo ver. takeUntil también espera un 'evento', y no hay buenos que pueda ver.

En este momento solo soluciono la advertencia tirando el desechable:

 _ = observeable.subscribeNext { ... } 

¿Hay alguna manera de hacer esto, o un paradigma diferente que debería usar?

Tanto DiposeBag como takeUntil se utilizan para cancelar una suscripción antes de recibir el evento .Completed/.Error .

Cuando se completa un Observable , todos los resources utilizados para gestionar la suscripción se eliminan automáticamente.

A partir de RxSwift 2.2, puede presenciar un ejemplo de implementación para este comportamiento en 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() } } } 

Vea cómo las llamadas AnonymousObservableSink se deshacen de sí mismo al recibir un .Error o .Completed , luego de reenviar el evento.

En conclusión, para su caso de uso, _ = es el path a seguir.