次のプロトコル定義を使用します。
protocol Presenter: AnyObject {
typealias InteractorType
var interactor: InteractorType { get }
}
protocol Activable: AnyObject {
var active: Bool { get set }
}
extension Activable where Self: Presenter, Self.InteractorType: Activable {
var active: Bool {
get { return interactor.active }
set { interactor.active = newValue }
}
}
protocol MyInteractorLike: Activable {}
そしてそれらを実装するクラス:
class MyInteractor: MyInteractorLike {
var active = false
}
class MyPresenter: PresenterLike, Activable {
let interactor: MyInteractorLike
init(interactor: MyInteractorLike) {
self.interactor = interactor
}
}
エラーが発生します:
MyPresenter はプロトコル Activable に準拠していません
ただし、依存関係をプロトコルではなく具象クラスとして再定義すると、次のようになります。
class MyPresenter: PresenterLike, Activable {
let interactor: MyInteractor
init(interactor: MyInteractor) {
self.interactor = interactor
}
}
すべてが桃です。プロトコルの関連付けられたタイプが具体的なタイプではなく、さらに別のプロトコルに解決される場合、プロトコル拡張の一致に問題があるようです。
だから私は疑問に思っていました:私は何かが足りないのですか?これは既知の問題ですか? 回避策を知っていますか?