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

Son*_*oni 2 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 { }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我在下一行收到错误

extension DashboardPresenter: DashboardViewProtocol { }
Run Code Online (Sandbox Code Playgroud)

那个,DashboardPresenter不向协议确认DashboardViewProtocol,但我已经宣布weak var view: DashboardPresenterProtocol?DashboardPresenter.虽然我已经宣布了

为什么我收到此错误?请让我知道我在这段代码中做错了什么.

Ham*_*ish 6

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

想想看,如果这会发生什么可能的,你上溯造型的一个实例DashboardPresenterDashboardViewProtocol.您将能够分配符合BasePresenterProtocol类型属性的任何内容DashboardPresenterProtocol?- 这将是非法的.

出于这个原因,读写属性要求必须是不变的(尽管值得注意的是,只读的属性要求应该能够协变 - 但目前不支持这种要求).

虽然在任何情况下,协议都不符合自己,所以你甚至不能使用BasePresenterProtocol?符合的类型DashboardPresenterProtocol?.