Swift3 什么是零或“零”;“空的”;Swift中的可数范围?

Swift3 什么是零或“零”;“空的”;Swift中的可数范围?,swift3,iteration,control-flow,Swift3,Iteration,Control Flow,在迅捷3中 let highestIndex = 7 for index in 1 ..< highestIndex { latter(index) } 让highestIndex=7 对于1中的索引,..

在迅捷3中

let highestIndex = 7
for index in 1 ..< highestIndex {
    latter(index)
}
让highestIndex=7
对于1中的索引,..
但是,

let highestIndex = 0, or anything smaller
for index in 1 ..< highestIndex {
    latter(index)
}
让highestIndex=0或任何更小的值
对于1中的索引,..
那就崩溃了

因此,在大多数情况下,..<运算符是不切实际的

所以,也许,像这样的事情

for index in (1 ..< highestIndex).safely() {
    latter(index)
}
用于(1..
如何安全地编写扩展名


或者在最坏的情况下,仅仅是一个函数
安全地(从、到)
,它返回一个可数范围,或者是一个“空”(?)可数范围?(我不明白Swift扩展是否能“捕获”错误?

我能让它正常工作:

for index in 1 ..< 1 {
    latter(index)
}
用于1中的索引..<1{
后者(索引)
}
对于
0 else{return}
对于1中的索引,..
尽可能靠近
。可数范围,其中Bound:u可移动且可比较,Bound.步长:整数{
如果最大值<最小值{
返回可计数范围(未选中边界:(下限:最小值,上限:最小值))
}
返回可计数范围(未选中边界:(下限:最小值,上限:最大值))
}

设一=安全(0,12)//CountableRange(0..我喜欢简单的解决方案:

let lowerIndex = 1
let higherIndex = 0
for index in lowerIndex ..< max(lowerIndex, higherIndex) {
    latter(index)
}
让lowerIndex=1
设higherIndex=0
对于以lowerIndex表示的索引..
Hey Mark-谢谢你。当然,“guard”是一个很棒的功能。但是,你知道,它对内联代码没有好处;最自然的情况是,如果值太低,你只想让它“不进行任何迭代”…“有“空”可数范围这样的东西吗?”–是的,
1“返回0..agreed-KISS。我想,可以将其放入自定义中缀运算符中,就这样。
public func safely<Bound>(_ minimum: Bound, _ maximum: Bound) -> CountableRange<Bound> where Bound : _Strideable & Comparable, Bound.Stride : Integer {
    if maximum < minimum {
        return CountableRange(uncheckedBounds: (lower: minimum, upper: minimum))
    }
    return CountableRange(uncheckedBounds: (lower: minimum, upper: maximum))
}

let one = safely(0, 12)  // CountableRange(0..<12)
let two = safely(15, 12) // CountableRange(15..<15)

one.isEmpty // false
two.isEmpty // true
let lowerIndex = 1
let higherIndex = 0
for index in lowerIndex ..< max(lowerIndex, higherIndex) {
    latter(index)
}