![](/img/trans.png)
[英]Swift: override associatedtype from protocol extension in protocol conformance
[英]associatedtype protocol conformance issues
我有 3 个协议来定义Mediator
使用Host
提取Client
的关系
Host
Client
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.