2

我想定义一个 Swift 协议,它也是一个序列,其元素符合另一个特定协议。理想情况下,我想写这样的东西:

protocol A { 
  var container: Container { get }
}

protocol Container: Sequence where Iterator.Element: A {
  ...
}

不幸的是,Swift 目前不允许在协议定义中使用 where 子句(而且它也不允许使用具有关联类型的协议作为类型约束)。有什么办法我仍然可以做到这一点?容器(理想情况下是 A)应该能够有不同的支持实现。

编辑:我知道我可以将序列移动到 Container 的类型擦除属性,这将以引入不必要的词法开销为代价解决所有问题。不过,我对一种不会“欺骗”出类型系统的解决方案感兴趣。

4

0 回答 0