MENU

【Combine】mergeとCombineLatestの違いについて説明してみた

目次

1. mergeとCombineLatest

RxSwift+MVVM → Combine+TCAにリファクタしている過程で以下の疑問点が湧いてきました。
margeCombineLatestどちらもストリームを束ねる点では共通です。
では、何が違うのか解説していきます。

2. merge

mergeは2つのストリームを束ねて、どちらかが流れてきたら実行しまっせという感じです。

mergはOR条件と思っておけば良いでしょう!

import RxRelay
class ExampleViewModel {
// input
let didTappedIndexButton = PublishRelay()
let didInputtedTextField = PublishRelay()

t didInputtedTextField = PublishRelay()

init() {
    let fetchSomethingResult = Observable.merge(didTappedButton, didInputtedTextField)
        print("ログインボタンorテキストフィールドのどちらかがタップされました")
    }

上のコードでは、ログインボタンorテキストフィールドのどちらかがタップされた時にprintが実行されます。

3. CombineLatest

両方が流れてきたら実行しまっせという感じです。

CombineLatestはAND条件と思っておけば良いでしょう!

import RxRelay
class ExampleViewModel {
// input
let didTappedIndexButton = PublishRelay()
let didInputtedTextField = PublishRelay()
let didTappedIndexButton = PublishRelay()
let didInputtedTextField = PublishRelay()

init() {
    let fetchSomethingResult = Observable. combineLatest(didTappedButton, didInputtedTextField)
        print("ログインボタンandテキストフィールドの両方がタップされました")
    }

上のコードでは、ログインボタンandテキストフィールドの両方がタップされた時にprintが実行されます。
(状況的にあり得るかは置いておいて笑)

4. おわりに

今回も本記事を読んでいただきありがとうございました。
似たような考え方でややこしいですが、AND条件、OR条件と思うとシンプルだと思います♫

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Rio@iOSエンジニアのアバター Rio@iOSエンジニア 経営者兼モバイルアプリエンジニア

都内のモバイルアプリ開発会社経営者。
モバイルアプリの新規の請負開発及び保守運用を引き受ける。
Denso→Honda→現在
#RxSwift #MVVM #Firebase #Python3

コメント

コメントする

目次