[RxSwift] 異なる型のストリームをまとめてdebounceする方法

公開日: : 最終更新日:2020/07/03 iOSアプリ開発 ,

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

UntitledImage

こんばんは、@akio0911です。

RxSwiftを使っていて、異なる型の複数のストリームに対してdebounceをかけたいことがあったので、その方法を紹介したいと思います。

以下のようなObservableが2つあったとします。Observable<String>とObservable<Int>で型が異なります。

この2つに対してまとめてdebounceをかけてみましょう。

まずは型をまとめるためのenumを定義します。

まとめるためのenumを用意したら、mapを使って型の変換を行います。
ここではStringをValue.stringに、IntをValue.intに変換します。
ストリームの型としてはObservable<String>とObservable<Int>の両方をObservable<Value>に変換します。

2つのストリームの型がそろったので、mergeで1つのストリームにまとめます。

ストリームが1つにまとまったのでdebounceをかけることができます。

subscribeして必要な処理を書いてみましょう。
enum Valueとして1つにまとめられているので、switchを使って元々の値を取り出します。

なお、mapの部分は以下のように書くこともできます。

なぜなら、Value.stringはStringをValueに変換する関数、
Value.intはIntをValueに変換する関数でもあるからです。

参考になれば幸いです。

最近、iOSアプリ開発をテーマとしたオンラインサロンを作りました。気になる方はぜひチェックして頂ければと思います。

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑