在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> {}
这是我想要做的事情的想法。它适用于实施A
和B
类。但我不能让它适用于C
课程。
我似乎必须为B
指定什么是A
类型:
class C<Bx: B<A>> {}
但是,C1
和C2
与C
类继承不匹配,导致B1
(又名B<A1>
)和{{1} }(又名B2
)不会继承B<A2>
如何让它在Swift中运行?
答案 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>'
。