web-dev-qa-db-ja.com

RxSwiftで2つの通知オブザーバーをマージする

私はこのコードを持っています:

let appActiveNotifications: [Observable<NSNotification>] = [
    NSNotificationCenter.defaultCenter().rx_notification(UIApplicationWillEnterForegroundNotification),
    NSNotificationCenter.defaultCenter().rx_notification(Constants.AppRuntimeCallIncomingNotification)
]

appActiveNotifications.merge()
  .takeUntil(self.rx_deallocated)
  .subscribeNext() { [weak self] _ in
  // notification handling
}
.addDisposableTo(disposeBag)

指定された通知のいずれかをリッスンし、それらのいずれかがトリガーされたときに処理することになっています。

ただし、これはコンパイルされません。次のエラーが発生します。

Value of type '[Observable<NSNotification>]' has no member 'merge'

では、これら2つの信号を1つにマージするにはどうすればよいですか?

10
Milan Cermak

.merge()は複数のObservablesを組み合わせているので、appActiveNotifications.toObservable()を実行してから、.merge()を呼び出します。

編集:または RxSwiftの遊び場 の例として、Observable.of()を使用してから.merge() on it;そのようです:

let a = NSNotificationCenter.defaultCenter().rx_notification(UIApplicationWillEnterForegroundNotification)
let b = NSNotificationCenter.defaultCenter().rx_notification(Constants.AppRuntimeCallIncomingNotification)

Observable.of(a, b)
  .merge()
  .takeUntil(self.rx_deallocated)
  .subscribeNext() { [weak self] _ in
     // notification handling
  }.addDisposableTo(disposeBag)
24
David Chavez