Объединение двух наблюдателей уведомлений в RxSwift

У меня есть этот фрагмент кода:

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'

Как мне тогда объединить эти два сигнала в один?


person Milan Cermak    schedule 01.04.2016    source источник


Ответы (1)


.merge() объединяет несколько Observables, поэтому вам нужно сделать appActiveNotifications.toObservable(), а затем вызвать .merge()

Изменить: Или как пример в площадка RxSwift, вы можете использовать Observable.of(), а затем использовать .merge() на ней; вот так:

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)
person David Chavez    schedule 01.04.2016