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


今日は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に変換させて、エラーにならないようにしています

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

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
    // イケてる処理
})

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