gpt4 book ai didi

swift - 为某个关联类型实现 PAT

转载 作者:搜寻专家 更新时间:2023-11-01 06:26:29 24 4
gpt4 key购买 nike

假设,您有一个 PAT:

protocol PAT {
associatedtype T
func provide() -> T
}

还有另一个协议(protocol),使用该协议(protocol)作为类型约束:

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

有没有办法为特定关联类型的 PAT 实现第二个协议(protocol)?例如,如果可能的话,那就太好了:

struct Consumer: RegularProtocol /*!*/ where RegularProtocol.T == () /*!*/ {
func consume<P: PAT>(_ pat: P) {
// ...
}
}

我还没有找到一种方法来做任何类似的事情,我假设需要重新思考架构。但无论如何,有什么我错过的吗?

对于处理此类情况的任何建议,我们将不胜感激!谢谢!

最佳答案

一种可能性是将 associatedType 添加到 RegularProtocol:

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 类型,因此您不能仅针对某些类型部分实现它。

关于swift - 为某个关联类型实现 PAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53802719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com