首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为某个关联类型实现PAT

为某个关联类型实现PAT
EN

Stack Overflow用户
提问于 2018-12-16 21:39:55
回答 1查看 40关注 0票数 1

假设你有一个PAT:

代码语言:javascript
复制
protocol PAT {
    associatedtype T
    func provide() -> T
}

另一个协议,使用该协议作为类型约束:

代码语言:javascript
复制
protocol RegularProtocol {
    func consume<P: PAT>(_ pat: P) -> P.T
}

有没有办法为特定关联类型PAT实施第二个协议?例如,如果它是可能的,那就太好了,比如:

代码语言:javascript
复制
struct Consumer: RegularProtocol /*!*/ where RegularProtocol.T == () /*!*/ {
    func consume<P: PAT>(_ pat: P)  {
        // ...
    }
}

我还没有找到一种方法来做任何类似的事情,我假设架构需要重新思考。不管怎么说,我是不是漏掉了什么?

任何关于处理这种情况的建议都是值得感谢的!谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-16 21:59:24

一种可能是向RegularProtocol添加一个associatedType

代码语言:javascript
复制
protocol PAT {
    associatedtype T
    func provide() -> T
}

protocol RegularProtocol {
    associatedtype T
    func consume<P: PAT>(_ pat: P) -> T where P.T == T
}

struct Consumer: RegularProtocol {
    typealias T = Int
    func consume<P: PAT>(_ pat: P) -> T where P.T == T {
      return pat.provide() * 10
    }
}

请注意,没有关联类型的RegularProtocol必须接受所有PAT类型,因此您不能仅为某些类型部分实现它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53802719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档