Swift协议继承和协议一致性问题

时间:2016-11-03 20:43:08

标签: swift swift-protocols

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。虽然我已宣布

为什么我收到此错误?请告诉我这段代码中我做错了什么。

1 个答案:

答案 0 :(得分:6)

您无法使用类型为BasePresenterProtocol?的属性实现类型为DashboardPresenterProtocol?的读写属性要求。

考虑如果此 可能会发生什么,并且您将DashboardPresenter的实例向上转换为DashboardViewProtocol。您可以将符合BasePresenterProtocol的任何内容分配给DashboardPresenterProtocol?类型的属性 - 这将是非法的。

出于这个原因,读写属性要求具有是不变的(尽管值得注意的是,只读的属性要求应该能够协变 - {{3 }})。