0

ローカル通知とプッシュ通知を受信したときにオブザーバブルを実装するにはどうすればよいですか。アプリデリゲートでは、私たちは通知しています

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)

このクラスの最も良い点は、anyObject を介して発行および消費できることです。

4

1 に答える 1

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を学んでいるので、これは最善の方法ではないかもしれません. しかし、それは機能します。

于 2016-04-08T21:30:25.427 に答える