循環語句可以使程序代碼重複執行。Swift編程語言支持4種循環構造類型:while、do while、for和for in。for和while循環是在執行循環體以前測試循環條件,而do while是在執行循環體以後測試循環條件。這就意味着for和while循環可能連一次循環體都未執行,而do while將至少執行一次循環體。for in是for循環的變形,它是專門爲集合遍歷而設計的。
1、while語句
while語句是一種先判斷的循環結構,格式以下:
while 循環條件 {
語句組
}
while循環沒有初始化語句,循環次數是不可知的,只要循環條件知足,循環就會一直進行下去。
下面看一個簡單的示例,代碼以下:
php
[html] view plaincopyhtml
var i:Int64 = 0 編程
while i * i < 100000 { swift
i++ 數組
} 微信
println("i = \(i)") 多線程
println("i * i = \(i * i)") 編程語言
輸出結果以下:
i = 317
i * i = 100489
上述程序代碼的目的是找到平方數小於100 000的最大整數。使用while循環須要注意幾點,while循環條件語句中只能寫一個表達式,並且是一個布爾型表達式,那麼若是循環體中須要循環變量,就必須在while語句以前對循環變量進行初始化。示例中先給i賦值爲0,而後在循環體內部必須經過語句更改循環變量的值,不然將會發生死循環。
提示死循環對於單線程程序而言是一場災難,可是在多線程程序中,死循環是必需的,死循環會出如今子線程中。例如遊戲設計中對玩家輸入裝置的輪詢,或是動畫程序的播放,都是須要死循環的。下面的代碼是死循環的通常寫法。
while true {
語句組
}
提示循環是比較耗費資源的操做,如何讓開發人員測試和評估循環效率呢?Xcode 6提供的Playground工具能夠幫助咱們實現這個目的。在Playground界面中打開時間軸。打開Playground界面後運行代碼,以下圖所示,程序運行過程當中會在右邊時間軸繪製出一條線段,橫軸是經歷的時間,縱軸是i值變化,咱們在執行完成後拖曳線段,查看運行歷史中i值內容。就本例而言,時間軸中的線段越陡,執行的效率越高。
2、do while語句
do while語句的使用與while語句類似,不過do while語句是過後判斷循環條件結構,語句格式以下:
do {
語句組
} while 循環條件
do while循環沒有初始化語句,循環次數是不可知的,無論循環條件是否知足,都會先執行一次循環體,而後再判斷循環條件。若是條件知足則執行循環體,不知足則中止循環。
下面看一個示例代碼:工具
[html] view plaincopy測試
var i:Int64 = 0
do{
i++
} while i * i < 100000
println("i = \(i)")
println("i * i = \(i * i)")
輸出結果以下:
i = 317
i * i = 100489
該示例與上一節的示例是同樣的,都是找到平方數小於100 000的最大整數。輸出結果也是同樣的。
3、for語句
for語句是應用最普遍、功能最強的一種循環語句。通常格式以下:
for 初始化; 循環條件; 迭代 {
語句組
}
當程序執行到for語句時,會先執行初始化語句,它的做用是初始化循環變量和其餘變量,而後程序會查看循環條件是否知足,若是知足,則繼續執行循環體並計算迭代語句,以後再判斷循環條件,如此反覆,直到判斷循環條件不知足時跳出循環。終止語句通常用來改變循環條件,它可對循環變量和其餘變量進行操做。
如下示例代碼是計算1~9的平方表程序:
[html] view plaincopy
println("n n*n")
println("---------")
for var i = 1; i < 10; i++ {
println("\(i) x \(i) = \(i * i)")
}
輸出結果以下:
n n*n
---------
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
6 x 6 = 36
7 x 7 = 49
8 x 8 = 64
9 x 9 = 81
在這個程序的循環部分初始時,給循環變量i賦值爲1,每次循環都要判斷i的值是否小於10,若是爲true,則執行循環體,而後給i加1。所以,最後的結果是打印出1~9的平方,不包括9。
初始化、循環條件以及迭代部分均可覺得空語句(但分號不能省略),三者均爲空的時候,至關於一個無限循環。
for ; ; {
......
}
在初始化部分和迭代部分,可使用逗號語句來進行多個操做。逗號語句是用逗號分隔的語句序列,以下程序代碼所示:
[html] view plaincopy
var x:Int32
var y:Int32
for x = 0, y = 10; x < y; x++, y-- {
println("(x,y) = (\(x),\(y))")
}
輸出結果以下:
(x,y) = (0,10)
(x,y) = (1,9)
(x,y) = (2,8)
(x,y) = (3,7)
(x,y) = (4,6)
4、for in語句
Swift提供了一種專門用於遍歷集合的for循環——for in循環。使用for in循環沒必要按照for的標準套路編寫代碼,只須要提供一個集合就能夠遍歷。
假設有一個數組,原來遍歷數組的方式以下:
[html] view plaincopy
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
println("----for-------")
for var i = 0; i < countElements(numbers); i++ {
println("Count is: \(i)")
}
輸出結果以下:
Count is: 0
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
上述語句let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]聲明並初始化了10個元素數組集合,目前你們只須要知道當初始化數組時,要把相同類型的元素放到[…]中而且用逗號分隔(,)便可,關於數組集合咱們會在第10章詳細介紹。
採用for in循環語句遍歷數組的方式以下:
[html] view plaincopy
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
println("----for in----")
for item in numbers {
println("Count is: \(item)")
}
輸出結果以下:
Count is: 0
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
從上例能夠發現,item是循環變量,item以前使用var聲明,它是隱式變量聲明的。in後面是集合實例,for in循環語句會將後面集合中的元素一一取出來,保存到item中。可見for in語句在遍歷集合的時候要簡單方便得多。可是對於其餘操做,for in循環就不太適合了。
更多內容請關注國內第一本Swift圖書《Swift開發指南》
本書交流討論網站:http://www.51work6.com/swift.php
歡迎加入Swift技術討論羣:362298485
歡迎關注智捷iOS課堂微信公共平臺