3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Observable.mergeとCombineLatestの違い【メモ】

Posted at

RxSwiftを使っていて、Observable.mergeとCombineLatestにおいて混乱したので、その違いをここにメモする。

Observable.mergeとは?

  • 具体例を持って説明する。
import RxRelay
class ExampleViewModel {
    // input
    let didTappedButton = PublishRelay<Void>()
    let didInputtedTextField = PublishRelay<String>()

    init() {
        let fetchSomethingResult = Observable.merge(didTappedButton, didInputtedTextField)
            .flatMap {
                repository.fetchSomething()
            }
            .share()
        }
  • このような形でViewModelがあった場合に、Observable.mergeを利用すると、didTappedButtonもしくは、didInputtedTextFieldに値が流れてくるたびに、repository.fetchSomething()が行われる。
  • つまり、Observable.merge内で指定されている値をどちらも監視してくださいと言う意味である。

CombineLatestとは?

具体例をもって説明する。

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

    init() {
        let fetchSomethingResult = Observable
            .combineLatest(didTappedButton, didInputtedTextField)
            .flatMap {
                repository.fetchSomething()
            }
            .share()
        }
  • このような形のVMがあった場合に、combineLatestを使うとdidTappedButtondidInputtedTextFieldの両方に値が流れてきた時にかrepository.fetchSomething()が実行されない。
  • Observable.mergeとの違いとしては、didTappedButtonのみがタップされても、repository.fetchSomething()が実行されないことである。
  • つまり、combineLatestを使う場合は、監視される値は両方の値が流れないと意味をなさないものである。
3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?