【Swift】【Combine】mergeとCombineLatestの違いを説明してみる
1. mergeとCombineLatest
RxSwift+MVVM → Combine+TCAにリファクタしている過程で以下の疑問点が湧いてきました。
marge
とCombineLatest
どちらもストリームを束ねる点では共通です。
では、何が違うのか解説していきます。
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条件と思うとシンプルだと思います♫