在Swift 2.x中迭代一个封闭的间隔

时间:2016-06-22 21:14:22

标签: swift loops range intervals

如何在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(包括0和255),并且类型保持UInt8非常重要。所以我不能使用范围,因为类型的最大值不能成为范围的一部分。但我无法弄清楚如何迭代ClosedInterval

2 个答案:

答案 0 :(得分:1)

如何使用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)

答案 1 :(得分:1)

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

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

不是最好的解决方案,但很高兴Swift 3解决了像vacawama所提到的这样的事情。