1. mergeとCombineLatest

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

2. merge

mergeは2つのストリームを束ねて、どちらかが流れてきたら実行しまっせという感じです。
mergはOR条件と思っておけば良いでしょう!

import RxRelay
class ExampleViewModel {
    // input
    let didTappedIndexButton = PublishRelay<Void>()
    let didInputtedTextField = PublishRelay<String>()

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

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

3. CombineLatest

mergeは2つのストリームを束ねて、両方が流れてきたら実行しまっせという感じです。
combineLatestはAND条件と思っておけば良いでしょう!

import RxRelay
class ExampleViewModel {
    // input
    let didTappedIndexButton = PublishRelay<Void>()
    let didInputtedTextField = PublishRelay<String>()

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

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

4. おわりに

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