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
。虽然我已经宣布了
为什么我收到此错误?请让我知道我在这段代码中做错了什么。
您不能使用类型为BasePresenterProtocol?
的属性实现类型为DashboardPresenterProtocol?
的读写属性要求。
考虑如果可能会发生什么,并且你将DashboardPresenter
的一个实例向上转换为DashboardViewProtocol
。您可以将符合BasePresenterProtocol
的任何内容分配给DashboardPresenterProtocol?
类型的属性 - 这将是非法的。
出于这个原因,读写属性要求必须是不变的(尽管值得注意的是,只读的属性要求应该能够协变 - but this currently isn't supported)。