RxSwift で特定の数だけイベントを受け取る
Hot な Observable から流れてくるイベントで、特定の回数だけイベントを受け取りたいということはよくあるかと思います。そんな時は .take()
を使って回数を絞ることができます。
下記はストリームに流れてきたイベントを Observable が一度受信したら、購読を解除する例です。このように take()
を使うことで回数をコントロールすることができます。
let fishCatched = PublishRelay<Void>.init() fishCatched .asObservable() .take(1) .subscribe { _ in print("魚がつれた!") } onDisposed: { print("購読解除") }.disposed(by: disposeBag)
また、上記の例でた回数分イベントが流れたら onCompleted
が呼び出されますが、concat
・never
を使うことで下記のように、onCompleted
を流さないようにもできるみたいです✍️
参考
Observable.of(subject.take(1), Observable.never()) .concat() .subscribe { print($0) } .addDisposableTo(disposeBag)