LoginSignup
2
1

More than 5 years have passed since last update.

swift4で異なる型のobserveをまとめてrxswiftでmergeする

Last updated at Posted at 2018-10-01

今日はswift!

ボタンをタップされた時のイベントとか、UserDefaultsの情報が更新されたタイミングだとか、homeから戻ってきたタイミングだとか……そういう諸々のイベントが発生した時にobserveの入り口を一つにして処理させたいということがあったので、備忘録も兼ねて!

それぞれの実行結果を引数として欲しい場合の実装例!

merge1.swift
let o1 = NotificationCenter.default
    .rx.notification(.UIApplicationDidBecomeActive)
    .map { $0 as AnyObject }

let o2 = UserDefaults.standard
    .rx.observe(String.self, "hoge")
    .map { $0 as AnyObject }

Observable.merge(o1, o2).subscribe(onNext: { arg in
    // イケてる処理を書こう!
})

AnyObjectに変換させて、エラーにならないようにしています:heart_eyes:

追記 実行結果は必要ない場合の実装例!

merge2.swift
let o1 = NotificationCenter.default
    .rx.notification(.UIApplicationDidBecomeActive)
    .map { _ in }

let o2 = UserDefaults.standard
    .rx.observe(String.self, "hoge")
    .map { _ in }

Observable.merge(o1, o2).subscribe(onNext: { _ in
    // イケてる処理
})

処理が簡潔になりました!

2
1
2

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
2
1