Swift 中的Range类型和 Range运算符
Swift中有五个最常用的Range类型:
• ClosedRange: a...b
• Range a..<b
• PartialRangeThrough: ...b
• PartialRangeFrom: a...
• PartialRangeUpTo: ..<b
对应的,有五个Range运算符,用来定义上面的Range类型
• Closed Range Operator: a...b
• Half-Open Range Operator: a..<b
• Prefix Closed Range Operator: …b
• Postfix Closed Range Operator: a…
• Prefix Half-Open Range Operator: ..<b
ClosedRange
ClosedRange类型代表一个闭区间 [a, b]
其声明是:
struct ClosedRange<Bound> where Bound : Comparable
我们可以用 closed range operator (a...b) 创造一个ClosedRange实例
let closedRange: ClosedRange<Double> = 1.2...6.3
我们可以检查一个值是否在一个ClosedRange范围内
closedRange.contains(3.6)
// true
如果一个ClosedRange用整数作为其边界,我们可以把它用在for-in loop中
for i in -1…2 {
print(i)
}
// -1
// 0
// 1
// 2
Range
Range类型代表一个右半开区间 [a, b),注意这里只能是右边开区间,左边必须是闭区间
其声明是:
struct Range<Bound> where Bound : Comparable
我们可以用 half-open range operator (a..<b)创造一个Range实例
let range: range<Double> = 1.2..<6.3
我们可以检查一个值是否在一个Range范围内
range.contains(3.6)
// true
range.contains(6.3)
// false, 因为上界是开区间
如果一个Range用整数作为其边界,我们可以把它用在for-in loop中
for i in -1..<2 {
print(i)
}
// -1
// 0
// 1
PartialRangeThrough
PartialRangeThrough 类型代表一个左边界无穷的闭区间 (-infinite, b]
其声明是:
struct PartialRangeThrough<Bound> where Bound : Comparable
我们可以用 prefix closed range operator (…b)创造一个PartialRangeThrough实例
let partialRangeThrough: PartialRangeThrough<Double> = …6.3
我们可以检查一个值是否在一个partialRangeThrough范围内
partialRangeThrough.contains(3.6)
// true
partialRangeThrough.contains(6.3)
// true
如果一个PartialRangeThrough用整数作为其边界,我们可以用它代表一个 collection 类型的索引 (从 0 到上边界)
let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[...3])
// [10, 20, 30, 40]
PartialRangeFrom
PartialRangeFrom 类型代表一个右边界无穷的闭区间 [a, +infinite)
其声明是:
struct PartialRangeFrom<Bound> where Bound : Comparable
我们可以用 postfix closed range operator (a…)创造一个PartialRangeFrom实例
let partialRangeFrom: PartialRangeFrom<Double> = 1.2…
我们可以检查一个值是否在一个PartialRangeFrom范围内
partialRangeFrom(1.2)
// true
partialRangeFrom(6.3)
// true
如果一个PartialRangeFrom用整数作为其边界,我们可以用它代表一个 collection 类型的索引 (从下边界到结束)
let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[3…])
// [40, 50, 60, 70]
PartialRangeUpTo
PartialRangeUpTo 类型代表一个左边界无穷的开区间 (-infinite, b)
其声明是:
struct PartialRangeUpTo<Bound> where Bound : Comparable
我们可以用 prefix half-open range operator (..<b)创造一个PartialRangeUpTo实例
let partialRangeUpTo: PartialRangeUpTo<Double> = ..<6.3
我们可以检查一个值是否在一个PartialRangeUpTo范围内
partialRangeUpTo(1.2)
// true
partialRangeUpTo(6.3)
// false, 因为上界是开区间
如果一个PartialRangeUpTo用整数作为其边界,我们可以用它代表一个 collection 类型的索引 (从0到上边界-1)
let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[..<3])
// [10, 20, 30]