[RxSwift] Observable(2)
昨日はObserverableの作成と購読方法について議論しましたが、購読をキャンセルする方法について説明します.
.dispose() DisposeBag()
1番と同じように購読をキャンセルすると、観測可能な数に応じて .create(:)
また、コメントを削除して実行すると、完全なイベントが解放され、disposabledが戻り、購読がキャンセルされます.
ここで必ずしも完了したイベントではない場合、Observerableが完全に終了したerrorイベントでもエラーが発生すると、使い捨てが返されます.
観測可能終了
dispose()
を呼び出すことで、観測可能サブスクリプションをキャンセルすることができ、キャンセルするとイベント解放は発生しません.let observable = Observable.of(1,2,3)
let subscription = observable.subscribe({ (value) in
print(value)
})
subscription.dispose()
// next(1)
// next(2)
// next(3)
// completed
上記のコードでは、要素は(1,2,3)のみであるため、完了したイベントは解放されるが、要素が無限に多い場合はdispose()
を呼び出す必要があるが、完了したイベントは解放される.1番と同じように購読をキャンセルすると、観測可能な数に応じて
dispose()
が行われるという問題があります.したがって,DisposedBag
型を用いて管理すれば,より効率的に管理できる.バッグのようにObserverableをDisposedBagに入れます.let observable = Observable.of(1,2,3)
let disposeBag = DisposeBag()
let subscription = observable.subscribe({ (value) in
print(value)
})
.disposed(by: disposeBag)
1つ目の例ではDisposeBag()メソッドを使用します..crete
演算子を使用してObservableを作成することもできます.Observableがcompleted
アクティビティを発行した場合、サブスクリプションは一時的に返されるとキャンセルされます.let disposeBag = DisposeBag()
Observable<Int>.create({ (observable) -> Disposable in
observable.onNext(1)
observable.onNext(2)
observable.onNext(3)
//observable.onCompleted()
return Disposables.create()
}).subscribe(onNext: { print($0) }, onError: { print($0) }, onCompleted: { print("completed") }, onDisposed: { print("disposed") }
).disposed(by: disposeBag)
上記の例では、completed
イベントのonCompleted()
部分を注釈して実行すると、以下の結果が得られる.また、コメントを削除して実行すると、完全なイベントが解放され、disposabledが戻り、購読がキャンセルされます.
ここで必ずしも完了したイベントではない場合、Observerableが完全に終了したerrorイベントでもエラーが発生すると、使い捨てが返されます.
Reference
この問題について([RxSwift] Observable(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@chagmn/RxSwift-Observable2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol