0

如何在收到本地通知和推送通知时实现 observable。在应用程序委托中,我们会收到通知

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)

这个类最好的一点是我们可以通过它发出和使用任何对象。

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 回答