如何在Swift中表达前进或后退范围?

时间:2017-08-25 01:49:25

标签: swift swift4

在Swift中是否有一种表达前向和后向可迭代范围的简洁方法?

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

for i in range {
  // ...
}

这不起作用,因为CountableRange和ReversedRandomAccessCollection&lt;(CountableRange)&gt;不兼容。

1 个答案:

答案 0 :(得分:2)

您需要使用类型橡皮擦。标准库提供AnyCollection,它只是诀窍:

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

for i in range {
  // ...
}