gpt4 book ai didi

swift - 区分 Swift 协议(protocol)中继承的 `associatedtype`

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:13 25 4
gpt4 key购买 nike

我正在使用一个库,它定义了两个协议(protocol),AB,每个协议(protocol)都有它的 associatedtype T,像这样:

protocol A {
associatedtype T
}
protocol B {
associatedtype T
}

这两个协议(protocol)在 T 上没有耦合,因此理论上第三个协议(protocol)可以继承 ABtypealiasing每个 T 到不同的类型。不幸的是,我无法让 Swift 区分这两个 T。我试过类似的东西:

protocol C: A, B {
typealias A.T = String
typealias B.T = String
}

但这不是受支持的语法。有办法解决这个问题吗?

最佳答案

这已在 Multiple protocols associatedtype name collision 中讨论过在 swift 论坛。吴晓迪写道:

It is very much possible, but the identically named associated types must be, in the conforming type, fulfilled by the same type.

In the future, there may be syntax added to allow types to conform to two protocols with such clashing requirements, but it adds great complexity in terms of implementation and is not without its own pitfalls for users (for example, it can get very confusing for end users of your type).

因此一个类型可以同时符合 AB 以及相同的关联类型 T,例如

struct Foo: A, B {
typealias T = String
}

一个协议(protocol)可以同时继承AB,并将T限制为相同的类型:

protocol C: A, B where T == String {

}

目前不支持同时符合具有不同关联类型的两种协议(protocol)。

关于swift - 区分 Swift 协议(protocol)中继承的 `associatedtype`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578085/

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