2016-04-08 4 views
-1

Как я могу реализовать наблюдаемые для локального уведомления и Push-уведомления при их получении. В приложение делегата, мы оповещать оRx_Swift для локальных и push-уведомлений

didReceiveLocalNotification 

и

didReceiveRemoteNotification 

Как я могу слушать эти уведомления на другом экране? Я использовал NotificationCenter для уведомления, но теперь я хочу использовать RX-Swift. Я пробовал таким образом, но не работал.

extension UILocalNotification { 
    var notificationSignal : Observable<UILocalNotification> { 
     return Observable.create { observer in 
      observer.on(.Next(self)) 
      observer.on(.Completed) 
      return NopDisposable.instance 
     } 
    } 
} 

Может ли кто-нибудь мне помочь?

Обновлено:

Привет, Я нашел решение для этого, используя точно так же, как вы привыкли, но некоторые изменения.

class NotificationClass { 
    static let bus = PublishSubject<AnyObject>() 

    static func send(object : AnyObject) { 
     bus.onNext(object) 
    } 

    static func toObservable() -> Observable<AnyObject> { 
     return bus 
    } 

} 

Отправить уведомление AppDelegate:

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) { 
    NotificationClass.send(notification) 
} 

Затем наблюдать на любом другом классе.

NotificationClass.bus.asObserver() 
     .subscribeNext { notification in 
      if let notification : UILocalNotification = (notification as! UILocalNotification) { 
       print(notification.alertBody) 
      } 
    } 
    .addDisposableTo(disposeBag) 

Лучшая вещь этого класса - мы можем испускать и потреблять любые объекты через него.

ответ

0

Как насчет чего-то подобного?

// this would really be UILocalNotification 
struct Notif { 
    let message: String 
} 

class MyAppDelegate { 
    let localNotification = PublishSubject<Notif>() 

    // this would really be `application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification)` 
    func didReceiveLocalNotification(notif: Notif) { 
     localNotification.on(.Next(notif)) 
    } 
} 

let appDelegate = MyAppDelegate() // this singleton would normally come from `UIApplication.sharedApplication().delegate` 

class SomeClassA { 
    let disposeBag = DisposeBag() 

    init() { 
     appDelegate.localNotification 
      .subscribe { notif in 
       print(notif) 
      } 
      .addDisposableTo(disposeBag) 
    } 
} 

let a = SomeClassA() 

appDelegate.didReceiveLocalNotification(Notif(message: "notif 1")) 

let b = SomeClassA() 

appDelegate.didReceiveLocalNotification(Notif(message: "notif 2")) 

Я все еще изучаю RxSwift, так что это может быть не лучший способ это сделать. Однако он работает.

Смежные вопросы