我想定义一个Swift协议,它也是一个具有符合另一个特定协议的元素的序列。理想情况下,我想写这样的东西:
protocol A {
var container: Container { get }
}
protocol Container: Sequence where Iterator.Element: A {
...
}
不幸的是,Swift目前还没有允许协议定义中的where子句(并且它也不允许使用具有相关类型的协议作为类型约束)。有什么办法我还能这样做吗?容器(最好是A)应该能够有不同的支持实现。
编辑:我知道我可以将序列移动到Container的类型擦除属性,这将解决所有问题,但代价是引入不必要的词汇开销。尽管如此,我仍然对一个没有作弊的解决方案感兴趣。它离开了类型系统。