Swift 协议继承和协议一致性问题
Swift Protocol inheritance and protocol conformance issue
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
,但我已经在 DashboardPresenter
中声明了 weak var view: DashboardPresenterProtocol?
。虽然我已经声明
为什么会出现此错误?请让我知道我在这段代码中做错了什么。
您不能使用 DashboardPresenterProtocol?
.
类型的 属性 实现 BasePresenterProtocol?
类型的读写 属性 要求
考虑一下如果 是 可能发生的情况,并且您将 DashboardPresenter
的实例向上转换为 DashboardViewProtocol
。您可以将任何符合 BasePresenterProtocol
的内容分配给 DashboardPresenterProtocol?
类型的 属性 – 这是非法的。
因此,读写 属性 要求 必须 不变(尽管值得注意的是,只读 属性 要求应该能够协变 – ).
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
,但我已经在 DashboardPresenter
中声明了 weak var view: DashboardPresenterProtocol?
。虽然我已经声明
为什么会出现此错误?请让我知道我在这段代码中做错了什么。
您不能使用 DashboardPresenterProtocol?
.
BasePresenterProtocol?
类型的读写 属性 要求
考虑一下如果 是 可能发生的情况,并且您将 DashboardPresenter
的实例向上转换为 DashboardViewProtocol
。您可以将任何符合 BasePresenterProtocol
的内容分配给 DashboardPresenterProtocol?
类型的 属性 – 这是非法的。
因此,读写 属性 要求 必须 不变(尽管值得注意的是,只读 属性 要求应该能够协变 –