swift3 - Swift 中的 nil 或 "empty"可数范围是多少?

标签 swift3 iteration control-flow

在 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/

相关文章:

C++ 从链表中删除

mysql - 如果第一个 SELECT 返回一个空集,则另一个 SELECT

python - 避免 Python 代码中的代码重复

swift - 如何在 Swift 中中断/退出内部循环

ios - SDWebImage 库在 swift 3 Xcode 8.0 中出现错误

swift - Swift 3 是否完全向后兼容以前的操作系统版本

javascript - 检查是否在页面加载时选择了复选框并向父 html li 添加一个类

ios - 在 Swift 3 中使用 AVCaptureVideoDataOutput 录制视频

ios - Swift 3 如何保存和加载数据

python - 循环遍历列表时获取下一个元素