在 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())
}
我有一个协议 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())
}