在 Swift 3 中返回一个序列

Returning a Sequence in Swift 3

我有一个协议 Points,其方法应该 return Point 个实例的有序序列。

我可以 return 一个数组,但是我可以 return 一些更通用的东西以便 Points 的实现不需要将数据复制到数组中吗?

我试过这样做:

protocol Points {
  var points: Sequence {get}
}

但是得到错误:

Protocol 'Sequence' can only be used as a generic constraint because it has Self or associated type requirements

在较早的问题中,我读到了有关 SequenceOf 的内容,但这在 Swift 中似乎不存在 3.

下面是 Points 协议的示例实现:

extension PointSetNode: Points {
  var points: ?????? {
    return children.map{[=12=].points}.joined()
  }
}

…这里,children是一个数组。

作为 你应该为此使用 AnySequence。协议定义为:

protocol Points {
  var points: AnySequence<Point> {get}
}

这个的实现可能是:

var points: AnySequence<Point> {
  return AnySequence(children.map{[=11=].points}.joined())
}