Avatar
omochimetaru 4/22/2019 8:20 AM
一応 TypeErasureを定義すれば問題は回避できますが、それが正しいアプローチかどうか自信無いです。 ↓回避例 // Type Erasure public class AnyAppConfigProvider : NSObject, AppConfigProvider { public var config: AppConfig { get { return base.config } set { base.config = newValue } } private let base: AppConfigProvider public init<X: AppConfigProvider>(_ base: X) { self.base = base } } // 実際の具体的なAppConfigProvider public class ACP : NSObject, AppConfigProvider { public var config: AppConfig public init(config: AppConfig) { self.config = config } } // 利用時 var a: AnyAppConfigProvider = AnyAppConfigProvider(ACP(config: AppConfig())) print(a.rx.config) (edited)
8:21 AM
受け取る側で AppConfigProvider で受け取るのではなくて、 AnyAppConfigProvider で受け取るようにします。 代入するときは AnyAppConfigProvider.init<X> で明示的に包み込みます。
8:26 AM
Member 'slf' cannot be used on value of protocol type 'ProtoA'; use a generic constraint instead
↑この種のエラーメッセージが出るのは、 RxSwift.ReactiveCompatiblevar rx: Reactive<Self> のところで、 プロトコル型それ自身を Self として使おうとしているからです。