我可以使用相同的关联类型声明两个协议吗?

时间:2018-06-20 19:40:52

标签: swift swift-protocols associated-types

我有两个协议定义了相同的associatedtype State: MyState。其中一个协议具有另一个协议类型的变量,所以我要做的是将类型State的对象从一个协议传递到另一个协议。但是,这不会编译,因为除了遵循相同的协议之外,State在视图中可能不是交互器中的。还有其他选择吗?在这里,我包含了一个片段,该片段可以按照我的意愿在操场上运行。

protocol MyState {}

protocol View {

    associatedtype State: MyState

    func renderState(state: State)
}

protocol Interactor {

    associatedtype CustomView: View
    associatedtype State: MyState

    var view: CustomView { get }
}

extension Interactor {

    func updateState(uiState: State) {
        view.renderState(state: uiState) // <---- error: cannot invoke 'renderState' with an argument list of type '(state: Self.State)'
    }
}

0 个答案:

没有答案