Avatar
NSObjectにしてObserveするとstructを使えず、AppConfigのpropertyを変更しただけだとObservableに流れてこないので、変更を通知するためにはインスタンスごと変更するなど、ちょっとコツが必要でした。そのため、名前をわかりやすいように分けるだけなら下記のような実装でもいいかなと思って、今はこんな感じで実装しています。 protocol AppConfigProvider { var rx: RxEnvironmentProvider { get } var config: AppConfig { get set } } protocol RxAppConfigProvider { var config: Observable<AppConfig> { get } } final class AppEnvironment: AppConfigProvider { private var rx: RxAppEnvironment var config: AppConfig { get { return try! configSubject.value() } set { rx.configSubject.onNext(newValue) } } } struct RxAppEnvironment: RxAppConfigProvider { let configSubject: BehaviorSubject<Entity.AppConfig> var config: Observable<AppConfig> { return configSubject } }