2016-04-08 24 views
-1

受信時にローカル通知とプッシュ通知のために観測可能を実装する方法を教えてください。アプリデリゲートで 、私たちは、私が他の画面上でこれらの通知を聞くことができますどのようにローカル通知とプッシュ通知のRx_Swift

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を学んでいるので、これを行うには最良の方法ではないかもしれません。しかし、それは動作します。