0

次のプロトコル定義を使用します。

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
    }
}

すべてが桃です。プロトコルの関連付けられたタイプが具体的なタイプではなく、さらに別のプロトコルに解決される場合、プロトコル拡張の一致に問題があるようです。

だから私は疑問に思っていました:私は何かが足りないのですか?これは既知の問題ですか? 回避策を知っていますか?

4

0 に答える 0