我有两个协议。它们中的每一个 (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 界多态性?