[英]Extend a protocol with generic associatedtype
假设我们有一个定义为的协议:
protocol PAT {
associatedtype Element
}
而且我还有一个枚举(典型结果)定义为:
enum Result<Value> {
case success(Value)
case error(Error)
}
现在,我想在Element
为Result<Value>
时向PAT
添加扩展,但是编译器无法确定Value
因此会触发编译错误,指示“对泛型需要参数的引用”。
这是扩展的代码:
extension Pat where Element == Result {
}
解决方案是创建另一个带有associatedType的协议,以将Result包装在其中。
protocol Resultable {
associatedType ValueType
var isSuccess: Bool { get }
var value: ValueType? { get }
}
并使Result扩展为Resultable:
extension Result: Resultable {
typealias ValueType = Value
var isSuccess: Bool { ... }
var value: ValueType? { ... }
}
并使用Resultable
扩展PAT
:
extension PAT where Element: Resultable {
// in here you have access to Resultable.ValueType
}
确保编写Element: Resultable
而不是Element == Resultable
。 这就是我的代码最初没有工作的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.