泛型模式的泛型

时间:2018-04-13 12:55:51

标签: swift generics inheritance

在Swift中

class A {}
class A1: A {}
class A2: A {}

class B<Ax: A> {}
class B1: B<A1> {}
class B2: B<A2> {}

class C<Bx: B> {}
class C1: C<B1> {}
class C2: C<B2> {}

这是我想要做的事情的想法。它适用于实施AB类。但我不能让它适用于C课程。 我似乎必须为B指定什么是A类型:

class C<Bx: B<A>> {}

但是,C1C2C类继承不匹配,导致B1(又名B<A1>)和{{1} }(又名B2)不会继承B<A2>

如何让它在Swift中运行?

1 个答案:

答案 0 :(得分:0)

只有C对两个类型参数具有通用性才能真正解决这个问题。

class C<Ax: A, Bx: B<Ax>> {}
class C1: C<A1, B1> {}
class C2: C<A2, B2> {}

不幸的是,必须在A的子类的签名中重复C的子类,但是您至少要对正在寻找的正确继承关系进行编译时检查。例如

class C2: C<A1, B2> {} // error

将产生错误'C' requires that 'B2' inherit from 'B<A1>'