如何实现符合相互关联协议之一的通用 class?
How to implement a generic class that conforms one of the mutually associated protocols?
我有两个协议。其中每一个(x)包含associatedtype
需要确认另一个协议(y)当associatedtype
这个协议(y) 等于 Self
(x).
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' requires the types 'AAA' and 'BBBB.AA' be equivalent
并注意:
requirement specified as 'Self' == 'Self.BB.AA' [with Self = AAA]
听起来可以理解。我将约束添加到我的通用 class.
class AAA<BBBB: B>: A where BBBB.AA == AAA {
typealias BB = BBBB
}
结果
error: type 'AAA' does not conform to protocol 'A'
note: protocol requires nested type 'BB'; do you want to add it?
error: type 'BBB' does not conform to protocol 'B'
note: protocol requires nested type 'AA'; do you want to add it?
我所有的尝试都没有成功,他们只是更改了错误消息。
有可能吗?怎么样?
以我目前的知识,我认为不可能做你想做的事。
我正在寻找更多信息,并找到了一些关于为什么不需要它的信息。
我有两个协议。其中每一个(x)包含associatedtype
需要确认另一个协议(y)当associatedtype
这个协议(y) 等于 Self
(x).
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' requires the types 'AAA' and 'BBBB.AA' be equivalent
并注意:
requirement specified as 'Self' == 'Self.BB.AA' [with Self = AAA]
听起来可以理解。我将约束添加到我的通用 class.
class AAA<BBBB: B>: A where BBBB.AA == AAA {
typealias BB = BBBB
}
结果
error: type 'AAA' does not conform to protocol 'A'
note: protocol requires nested type 'BB'; do you want to add it?error: type 'BBB' does not conform to protocol 'B'
note: protocol requires nested type 'AA'; do you want to add it?
我所有的尝试都没有成功,他们只是更改了错误消息。
有可能吗?怎么样?
以我目前的知识,我认为不可能做你想做的事。 我正在寻找更多信息,并找到了一些关于为什么不需要它的信息。