一尘不染

快速范围内的“间隔”是什么?

swift

我知道范围有3种类型:范围,步幅和间隔。

var closed:ClosedInterval = 1.2...5.0

var half_open:HalfOpenInterval = 1.2..<5.0

快速间隔是多少?以及它们使用的一个例子是什么?

http://zh.wikipedia.org/wiki/间隔(数学)

编辑:这就是beta 5 xcode 6发行说明所说的:

•可比较值的间隔,可以有效地检查是否包含。间隔用于switch语句中的模式匹配,并由〜=运算符使用。


阅读 260

收藏
2020-07-07

共1个答案

一尘不染

从Swift 3(使用Xcode
8)开始,Interval类型不再存在。现在,Range<T>类型族包括以前的范围和间隔类型的功能,并且还符合用于收集类型和索引新模型


在Swift 2.x和更早的版本中…范围用于迭代,间隔用于模式匹配。

func testNum(num: Int) {
    let interval: HalfOpenInterval = 0..<10
    let range = 10..<20
    switch num {
    case interval:    // this works
        break
    case range:       // error "does not conform to protocol IntervalType"
        break
    default:
        break
    }
}

Range类型进行了优化,以生成在整个范围内递增的值,并且可以使用可以计数和递增的类型。

一种Interval类型是用于测试是否区间内的给定值位于最优化。它适用于不一定需要递增概念的类型,并提供诸如将一个范围限制到另一个范围(例如(0..<10).clamp(5..<15)yield
5..<10)之类的操作,这些操作对于复杂的模式匹配很有用。

因为..<...运算符分别具有两种形式-一种返回a
Range,另一种返回Interval--type推断会根据上下文自动使用正确的一种。因此,如果您编写语句0..<10case标签switch,Swift会自动构造一个,HalfOpenInterval因为switch语句需要一种Interval类型。

~=运营商是一个办法做到在一个区间一个测试没有一个switch说法。写作interval ~= value等同于interval.contains(value)


值得注意的是,您可以通过查看标准库接口及其注释来发现许多这些问题:像HalfOpenInterval在操场上一样写一个类型名称,然后单击命令以跳至其定义。

2020-07-07