Swift提供了多种范围运算符,用来简洁的表达范围值。
闭合范围运算符
闭合范围运算符(a...b)定义一个表示从a到b的范围,a的值必须不大于b
闭合范围运算符在你希望迭代范围中所有值的时候很有用,比如在for-in语句中:
for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25”
半开范围运算符
半开运算符(a..<b)定义了一个从a到b但是不包括的b的范围。之所以称之为半开运算符,因为它包含了开始值a但不包括结束值b,和闭合运算符一样,a的值必须不大于b,如果a等于b,那么这个范围是空。
半开运算符在处理以0为基准的列表类数据会很有用,比如数组,可以使用数组的数组的长度进行迭代:
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack
数字中包含4个元素,但是0..<count只迭代到3,也就是最后一个元素的索引,这就是半开范围运算符。
单边范围运算符
如果范围需要往一个方向持续叠加,闭合范围运算符有一个替代的形式。比如要表示一个数组中索引为2的元素到最后一个元素的范围。这些情况下,可以省略范围运算符中一侧的值。这种范围被称为单边范围运算符,因为范围中值包含了一边的值。比如:
for name in names[2...] {
print(name)
}
// Brian
// Jack
for name in names[...2] {
print(name)
}
// Anna
// Alex
// Brian”
半开运算符也可以写成单边运算符的形式,只需要写上最后的值。就和你同时包含2侧的值一样,最后的值不包含在范围之内。例如:
for name in names[..<2] {
print(name)
}
// Anna
// Alex
除了下标运算,单边运算符也可以用在其他场景中。省略了起始值的单边范围不可以被迭代,因为不知道从哪里开始迭代。省略了终止值的单边范围可以被迭代。省略了终止值的单边范围可以无穷尽的持续叠加,所以你必须要给循环添加一个明确的终止条件。你也可以检查一个单边运算符是不是包含了一个特殊的值,就像下面一样:
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
网友评论