一度だけキックオフしたいというオブザーバブルがあります。ドキュメントは言う:
破棄バッグまたはtakeUntil演算子を使用すると、リソースを確実にクリーンアップできます。シーケンスが有限時間で終了する場合でも、本番環境で使用することをお勧めします。
オブザーバブルは1つのイベントの後で終了します
let observable = Observable.create() { observer in
webservice.makeHTTPRequestWithCompletionBlock {
if something {
observer.on(.Next(...))
observer.onCompleted()
} else {
observer.on(.Error(...))
}
}
}
このオブザーバブルのサブスクライバーのキャンセルに興味がなかったとしましょう。一度だけ実行して完了するだけです。このオブザーバブルのライフサイクルは、作業自体が完了したときに終了する必要があります。私が見ることができるdisposeBagの良い候補がないことを意味します。 takeUntilも「イベント」を期待しており、私が見ることができる良いものはありません。
現在、私は使い捨てを捨てることによって警告を解決します:
_ = observeable.subscribeNext { ... }
これを行う方法、または私が使用する必要のある別のパラダイムはありますか?
DiposeBag
とtakeUntil
の両方を使用して、サブスクリプションをキャンセルしますprior.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()
}
}
}
イベントを転送した後、.Error
または.Completed
イベントを受信したときに、AnonymousObservableSink
呼び出しがどのようにそれ自体を破棄するかを確認します。
結論として、この使用例では、_ =
が最適です。