for循環(huán)用來按照指定的次數(shù)多次執(zhí)行一系列語句。Swift 提供兩種for循環(huán)形式:
for-in用來遍歷一個區(qū)間(range),序列(sequence),集合(collection),系列(progression)里面所有的元素執(zhí)行一系列語句。for-condition-increment)語句,用來重復(fù)執(zhí)行一系列語句直到達成特定條件達成,一般通過在每次循環(huán)完成后增加計數(shù)器的值來實現(xiàn)。
你可以使用for-in循環(huán)來遍歷一個集合里面的所有元素,例如由數(shù)字表示的區(qū)間、數(shù)組中的元素、字符串中的字符。
下面的例子用來輸出乘 5 乘法表前面一部分內(nèi)容:
for index in 1...5 {
println("\(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
例子中用來進行遍歷的元素是一組使用閉區(qū)間操作符(...)表示的從1到5的數(shù)字。index被賦值為閉區(qū)間中的第一個數(shù)字(1),然后循環(huán)中的語句被執(zhí)行一次。在本例中,這個循環(huán)只包含一個語句,用來輸出當(dāng)前index值所對應(yīng)的乘 5 乘法表結(jié)果。該語句執(zhí)行后,index的值被更新為閉區(qū)間中的第二個數(shù)字(2),之后println方法會再執(zhí)行一次。整個過程會進行到閉區(qū)間結(jié)尾為止。
上面的例子中,index是一個每次循環(huán)遍歷開始時被自動賦值的常量。這種情況下,index在使用前不需要聲明,只需要將它包含在循環(huán)的聲明中,就可以對其進行隱式聲明,而無需使用let關(guān)鍵字聲明。
注意:
index常量只存在于循環(huán)的生命周期里。如果你想在循環(huán)完成后訪問index的值,又或者想讓index成為一個變量而不是常量,你必須在循環(huán)之前自己進行聲明。
如果你不需要知道區(qū)間內(nèi)每一項的值,你可以使用下劃線(_)替代變量名來忽略對值的訪問:
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
println("\(base) to the power of \(power) is \(answer)")
// 輸出 "3 to the power of 10 is 59049"
這個例子計算 base 這個數(shù)的 power 次冪(本例中,是3的10次冪),從1(3的0次冪)開始做3的乘法, 進行10次,使用1到10的閉區(qū)間循環(huán)。這個計算并不需要知道每一次循環(huán)中計數(shù)器具體的值,只需要執(zhí)行了正確的循環(huán)次數(shù)即可。下劃線符號_(替代循環(huán)中的變量)能夠忽略具體的值,并且不提供循環(huán)遍歷時對值的訪問。
使用for-in遍歷一個數(shù)組所有元素:
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
println("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
你也可以通過遍歷一個字典來訪問它的鍵值對(key-value pairs)。遍歷字典時,字典的每項元素會以(key, value)元組的形式返回,你可以在for-in循環(huán)中使用顯式的常量名稱來解讀(key, value)元組。下面的例子中,字典的鍵(key)解讀為常量animalName,字典的值會被解讀為常量legCount:
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
println("\(animalName)s have \(legCount) legs")
}
// spiders have 8 legs
// ants have 6 legs
// cats have 4 legs
字典元素的遍歷順序和插入順序可能不同,字典的內(nèi)容在內(nèi)部是無序的,所以遍歷元素時不能保證順序。關(guān)于數(shù)組和字典,詳情參見集合類型。
除了數(shù)組和字典,你也可以使用for-in循環(huán)來遍歷字符串中的字符(Character):
for character in "Hello" {
println(character)
}
// H
// e
// l
// l
// o