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

时间:2019-07-17 03:20:08

标签: swift generics protocols

我有两个协议。其中每个( x )包含associatedtype,当该协议{<1> y < / strong>)等于associatedtype(等于 x )。

Self

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

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
}

结果,我有一个错误:

  

“ A”要求类型“ AAA”和“ BBBB.AA”相等

并注意:

  

指定为'Self'=='Self.BB.AA'的要求[Self = AAA]

声音可以理解。我将约束添加到我的通用类中。

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

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

结果

  

错误:类型'AAA'不符合协议'A'
  注意:协议要求嵌套类型为“ BB”;您要添加吗?

     

错误:类型'BBB'不符合协议'B'
  注意:协议要求嵌套类型为“ AA”;您要添加吗?

我解决该问题的所有尝试均未成功,只是更改了错误消息。
有可能吗?怎么样?

1 个答案:

答案 0 :(得分:0)

以我目前的知识,我认为不可能做自己想做的事。 我一直在寻找更多信息,但我发现了其中一些不需要它的原因。

Why Swift doesn't have F-Bounded

Support for F-bounded polymorphism?