如何在 Swift 中表达向前或向后的范围?

How to express either forward or backward ranges in Swift?

在 Swift 中是否有一种清晰的方式来表达向前和向后的可迭代范围?

let range = forward ? (x+1)..<count : (0..<x).reversed()

for i in range {
  // ...
}

这不起作用,因为 CountableRange 和 ReversedRandomAccessCollection<(CountableRange)> 不兼容。

您需要使用橡皮擦。标准库提供了 AnyCollection,这就是诀窍:

let range = forward ? AnyCollection((x+1)..<count) : AnyCollection((0..<x).reversed())

for i in range {
  // ...
}