繁体   English   中英

associatedtype 协议一致性问题

[英]associatedtype protocol conformance issues

我有 3 个协议来定义Mediator使用Host提取Client的关系

  1. Host
  2. Client
  3. Mediator

我的目标是让Host也充当Mediator 这些是我的 class 和协议定义:

class Host {}
class Client {}

protocol HostProtocol {}
protocol ClientProtocol {}

extension Host: HostProtocol {}
extension Client: ClientProtocol {}

protocol MediatorProtocol {
    associatedtype H = HostProtocol
    associatedtype C = ClientProtocol

    func getClientFrom(host: H) -> C?
}

然后我扩展我的MediatorProtocol以添加一个实现

extension MediatorProtocol where H == Host, C == Client {
    func getClientFrom(host: H) -> C? {
        return Client()
    }
}

现在,当我尝试使我的主机符合 MediatorProtocol 时,我收到一条错误消息

类型“主机”不符合协议 MediatorProtocol

extension Host: MediatorProtocol {}

有任何想法吗?

只需在此更改协议规范

extension MediatorProtocol where H == Host, C == Client {
    func getClientFrom(host: Host) -> Client? {
        return Client()
    }
}

即使没有where规范,您也可以重写它。 Swift 可以从 function 声明中推断出关联的类型(这就是为什么它不能用你的代码这样做)。

extension MediatorProtocol {
    func getClientFrom(host: Host) -> Client? {
        return Client()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM