protocol BasePresenterProtocol : class {}
protocol DashboardPresenterProtocol : BasePresenterProtocol {}
final class DashboardPresenter {
weak var view: DashboardPresenterProtocol?
init() {
self.view = DashboardViewController()
}
func test() {
print("Hello")
}
}
extension DashboardPresenter: DashboardViewProtocol { }
protocol BaseViewProtocol : class {
weak var view: BasePresenterProtocol? { get set }
}
protocol DashboardViewProtocol : BaseViewProtocol {
}
class DashboardViewController {
}
extension DashboardViewController: DashboardPresenterProtocol { }
在上面的代码中,我在以下行中收到错误
extension DashboardPresenter: DashboardViewProtocol { }
,DashboardPresenter
未向协议DashboardViewProtocol
确认,但我已在weak var view: DashboardPresenterProtocol?
中声明DashboardPresenter
。虽然我已宣布
为什么我收到此错误?请告诉我这段代码中我做错了什么。
答案 0 :(得分:6)
您无法使用类型为BasePresenterProtocol?
的属性实现类型为DashboardPresenterProtocol?
的读写属性要求。
考虑如果此 可能会发生什么,并且您将DashboardPresenter
的实例向上转换为DashboardViewProtocol
。您可以将符合BasePresenterProtocol
的任何内容分配给DashboardPresenterProtocol?
类型的属性 - 这将是非法的。
出于这个原因,读写属性要求具有是不变的(尽管值得注意的是,只读的属性要求应该能够协变 - {{3 }})。