0

クラスのイニシャライザでオブザーバを設定し、NSObject からサブクラス化すると、作業中に奇妙な問題が発生し、何らかの理由で呼び出されません。オペレーターを外しduringLifetimeOfてディスポーザブルのみで保持してみましたがdeinit、あれもこれも作業。

PS: からサブクラス化しない場合、同じコードが機能しNSObjectます。以下のコード例 -

protocol ObservableFeatureSource {
    var futureFeatureChanges: Signal<AnyFeature, NoError> { get }
}

extension FeatureManager: ReactiveExtensionsProvider {}

extension Reactive where Base: FeatureManager {
    func monitorFeatureChanges<F>(for feature: ApplicationFeature<F>) -> Signal<ApplicationFeature<F>, NoError> {
        let observableSources = FeatureManager.shared.sources
            .flatMap { ($0 as? ObservableFeatureSource)?.futureFeatureChanges }
        return Signal<AnyFeature, NoError>.merge(observableSources)
            .filterMap { $0 == feature ? feature : nil }
    }
}

final class Example: NSObject {
   static let shared = Example()
    private override init() {
        super.init()
        FeatureManager.shared.reactive
            .monitorFeatureChanges(for: .someFeature)
            .observe(on: UIScheduler())
            .take(duringLifetimeOf: self)
            .observeValues({ _ in
                debugPrint("print something")
            })
    }
}
4

0 に答える 0