在 Swift 2.x 中迭代闭区间

Iterating over a closed interval in Swift 2.x

如何遍历 Swift 中 ClosedInterval 的每个成员?例如,此代码生成错误:

let UInt8_interval: ClosedInterval = UInt8.min ... UInt8.max

for x in UInt8_interval {

    print(x)

}

错误显示:Type 'ClosedInterval<UInt8>' does not conform to protocol 'SequenceType'

对于某些类型的按位运算,我确实希望遍历 0 到 255(含),并且类型保持 UInt8 很重要。所以我不能使用范围,因为类型的最大值不能是范围的一部分。但我不知道如何迭代 ClosedInterval.

使用stride怎么样?

let allUInt8 = UInt8.min.stride(through: UInt8.max, by: 1)

for x in allUInt8 {
    print(x)
}

allUInt8的类型是StrideThrough<UInt8>

如果您想要一个包含所有 UInt8:

的数组
let arrayUInt8 = Array(allUInt8)

ClosedInterval 不符合 SequenceType 这意味着它不能按原样用于 for in。如果您仍想使用 ClosedInterval,请使用区间的 startend 创建的范围:

for x in UInt8_interval.start..<UInt8_interval.end {
    print(x)
}

不是最好的解决方案,但很高兴 Swift 3 解决了 vacawama 提到的类似问题。