繁体   English   中英

扩展具有通用关联类型的协议

[英]Extend a protocol with generic associatedtype

假设我们有一个定义为的协议:

protocol PAT {
    associatedtype Element
}

而且我还有一个枚举(典型结果)定义为:

enum Result<Value> {
    case success(Value)
    case error(Error)
}

现在,我想在ElementResult<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.

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