在Swift3中,
1 * y * y
然而,
let highestIndex = 7
for index in 1 ..< highestIndex {
latter(index)
}
崩溃。
所以,...&lt;在大多数情况下,运算符是不切实际的。
所以,或许,这样的事情......
let highestIndex = 0, or anything smaller
for index in 1 ..< highestIndex {
latter(index)
}
如何编写扩展名for index in (1 ..< highestIndex).safely() {
latter(index)
}
?
或者最坏的情况是只返回一个函数safely
,它返回一个CountableRange,或者一个“空”(?)可数范围? (我不明白Swift扩展是否可以,“捕获”错误?)
答案 0 :(得分:1)
我能够让这个工作得很好:
for index in 1 ..< 1 {
latter(index)
}
对于<1
案例,我建议这样的事情:
guard highestIndex > 0 else { return }
for index in 1 ..< highestIndex {
latter(index)
}
答案 1 :(得分:1)
尽可能贴近..<
运算符,以下是safely
的适当实现。
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
您可能需要考虑为参数提供更好的名称,以表明它们是否具有包容性/排他性等等。
创建扩展程序并添加.safely()
将无效,因为在调用CountableRange
之前创建safely
时会检查边界。
答案 2 :(得分:1)
我是简单解决方案的粉丝:
let lowerIndex = 1
let higherIndex = 0
for index in lowerIndex ..< max(lowerIndex, higherIndex) {
latter(index)
}