1
1

【Swift】【Combine】mergeとCombineLatestの違いを説明してみる

Last updated at Posted at 2024-01-22

目次

1.mergeとCombineLatest
2.marge
3.CombineLatest
4.おわりに

1. mergeとCombineLatest

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

2. merge

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

merge.swift
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

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

CombineLatest.swift
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条件と思うとシンプルだと思います♫

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1