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