如何在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
。
答案 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
,请使用间隔的start
和end
创建的范围:
for x in UInt8_interval.start..<UInt8_interval.end {
print(x)
}
不是最好的解决方案,但很高兴Swift 3解决了像vacawama所提到的这样的事情。