如何实现符合相互关联协议之一的泛型类?



我有两个协议。它们中的每一个 (x) 都包含associatedtype,当该协议 (y) 的associatedtype等于Self(x 的) 时,需要确认另一个协议 (y)。

protocol B {
associatedtype AA: A
where AA.BB == Self
}
protocol A {
associatedtype BB: B
where BB.AA == Self
}

按如下方式实现这些协议是没有问题的:

class AAA: A {
typealias BB = BBB
}
class BBB: B {
typealias AA = AAA
}

但是我无法将其中一个实现为通用。

class AAA<BBBB: B>: A {
typealias BB = BBBB
}
class BBB: B {
typealias AA = AAA<BBB>
}

结果,我有一个错误:

">

A"需要类型"AAA"和"BBBB"。AA' 等效

并注意:

要求指定为"自我" == "自我.BB.AA" [自我 = AAA]

听起来可以理解。我将约束添加到我的泛型类中。

class AAA<BBBB: B>: A where BBBB.AA == AAA {
typealias BB = BBBB
}

和结果

错误:类型"AAA"不符合协议"A">
注意:协议需要嵌套类型"BB";是否要添加它?

错误:类型"BBB"不符合协议"B">
注意:协议需要嵌套类型"AA";是否要添加它?

我所有解决它的尝试都没有成功,他们只是更改了错误消息.
可以吗?如何?

以我目前的知识,我认为不可能做你想做的事。 我正在寻找更多信息,我找到了其中一些关于为什么不需要它的信息。

为什么 Swift 没有 F 边界。

是否支持 F 界多态性?

最新更新