iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

RxSwift で特定の数だけイベントを受け取る

Hot な Observable から流れてくるイベントで、特定の回数だけイベントを受け取りたいということはよくあるかと思います。そんな時は .take() を使って回数を絞ることができます。

下記はストリームに流れてきたイベントを Observable が一度受信したら、購読を解除する例です。このように take() を使うことで回数をコントロールすることができます。

    let fishCatched = PublishRelay<Void>.init()
    fishCatched
        .asObservable()
        .take(1)
        .subscribe { _ in
            print("魚がつれた!")
        } onDisposed: {
            print("購読解除")
        }.disposed(by: disposeBag)

また、上記の例でた回数分イベントが流れたら onCompleted が呼び出されますが、concatnever を使うことで下記のように、onCompleted を流さないようにもできるみたいです✍️

参考

qiita.com

Observable.of(subject.take(1), Observable.never())
    .concat()
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com