使用这些协议定义:
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
}
}
一切都是桃色的。如果协议的关联类型被解析为另一个协议而不是具体类型,那么匹配协议扩展似乎存在问题。
所以我想知道:我错过了什么吗?这是一个已知的问题?您知道任何解决方法吗?