RxSwift / RxCocoa では、デリゲート (UIScrollViewDelegate
または などCLLocationManagerDelegate
) のリアクティブ ラッパーを作成して、特定のデリゲート メソッドの Rx オブザーバブル シーケンスを有効にすることができます。
UIApplicationDelegate
メソッドにこれを実装しようとしていますapplicationDidBecomeActive:
これまでに試したことは非常に単純でDelegateProxy
、RxCocoa に含まれているサブクラスに似ています。
DelegateProxy
サブクラスを作成しました:
class RxUIApplicationDelegateProxy: DelegateProxy, UIApplicationDelegate, DelegateProxyType {
static func currentDelegateFor(object: AnyObject) -> AnyObject? {
let application: UIApplication = object as! UIApplication
return application.delegate
}
static func setCurrentDelegate(delegate: AnyObject?, toObject object: AnyObject) {
let application: UIApplication = object as! UIApplication
application.delegate = delegate as? UIApplicationDelegate
}
}
および Rx 拡張機能UIApplication
:
extension UIApplication {
public var rx_delegate: DelegateProxy {
return proxyForObject(RxUIApplicationDelegateProxy.self, self)
}
public var rx_applicationDidBecomeActive: Observable<Void> {
return rx_delegate.observe("applicationDidBecomeActive:")
.map { _ in
return
}
}
}
私の AppDelegate では、オブザーバブルにサブスクライブします。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// the usual setup
// and then:
application.rx_applicationDidBecomeActive
.subscribeNext { _ in
print("Active!")
}
.addDisposableTo(disposeBag)
return true
}
アプリを起動すると「アクティブ!」印刷され、RxCocoa の_RXDelegateProxy_
クラスで次のクラッシュが発生します。
問題が何であるかを知っている人はいますか?または、誰かが次のようなものを正常に実装しましたrx_applicationDidBecomeActive
か?