在 Swift3 中,
let highestIndex = 7
for index in 1 ..< highestIndex {
latter(index)
}
但是,
let highestIndex = 0, or anything smaller
for index in 1 ..< highestIndex {
latter(index)
}
崩溃了。
因此,..< 运算符在大多数情况下是不切实际的。
所以,也许,类似这样的事情......
for index in (1 ..< highestIndex).safely() {
latter(index)
}
如何安全地编写扩展
?
或者最坏的情况下只是一个返回 CountableRange 的函数 safely(from,to)
,或者一个“空”(?)可数范围? (我不明白 Swift 扩展是否可以“捕获”错误?)
最佳答案
严格遵守 ..<
运算符尽可能以下将是 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
之前甚至可以做到。
关于swift3 - Swift 中的 nil 或 "empty"可数范围是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058122/