在 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
,请使用区间的 start
和 end
创建的范围:
for x in UInt8_interval.start..<UInt8_interval.end {
print(x)
}
不是最好的解决方案,但很高兴 Swift 3 解决了 vacawama 提到的类似问题。
如何遍历 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
,请使用区间的 start
和 end
创建的范围:
for x in UInt8_interval.start..<UInt8_interval.end {
print(x)
}
不是最好的解决方案,但很高兴 Swift 3 解决了 vacawama 提到的类似问题。