? ? Swift提供了多種范圍運算符秃踩,用來簡潔的表達(dá)范圍值。
閉合范圍運算符
? ? 閉合范圍運算符(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但不包括結(jié)束值b拾稳,和閉合運算符一樣,a的值必須不大于b腊脱,如果a等于b访得,那么這個范圍是空。
? ? 半開運算符在處理以0為基準(zhǔn)的列表類數(shù)據(jù)會很有用陕凹,比如數(shù)組悍抑,可以使用數(shù)組的數(shù)組的長度進行迭代:
????????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? ??
? ? 數(shù)字中包含4個元素,但是0..<count只迭代到3杜耙,也就是最后一個元素的索引搜骡,這就是半開范圍運算符。
單邊范圍運算符
? ? 如果范圍需要往一個方向持續(xù)疊加佑女,閉合范圍運算符有一個替代的形式浆兰。比如要表示一個數(shù)組中索引為2的元素到最后一個元素的范圍磕仅。這些情況下,可以省略范圍運算符中一側(cè)的值簸呈。這種范圍被稱為單邊范圍運算符榕订,因為范圍中值包含了一邊的值。比如:
? ??????for name in names[2...] {
????????? ? print(name)
????????}
????????// Brian
????????// Jack
????????for name in names[...2] {
????????? ? print(name)
????????}
????????// Anna
????????// Alex
????????// Brian”
????半開運算符也可以寫成單邊運算符的形式蜕便,只需要寫上最后的值劫恒。就和你同時包含2側(cè)的值一樣,最后的值不包含在范圍之內(nèi)轿腺。例如:
? ??????for name in names[..<2] {
????????? ? print(name)
????????}
????????// Anna
????????// Alex
? ? 除了下標(biāo)運算两嘴,單邊運算符也可以用在其他場景中。省略了起始值的單邊范圍不可以被迭代族壳,因為不知道從哪里開始迭代憔辫。省略了終止值的單邊范圍可以被迭代。省略了終止值的單邊范圍可以無窮盡的持續(xù)疊加仿荆,所以你必須要給循環(huán)添加一個明確的終止條件贰您。你也可以檢查一個單邊運算符是不是包含了一個特殊的值,就像下面一樣:
? ??????let range = ...5
????????range.contains(7)? // false
????????range.contains(4)? // true
????????range.contains(-1)? // true