Swift中的循環語句

循環語句可以使程序代碼重複執行。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

 

  1. var i:Int64 = 0  編程

  2.   

  3.   

  4. while i * i < 100000 {  swift

  5.     i++  數組

  6. }  微信

  7.   

  8.   

  9. println("i = \(i)")  多線程

  10. 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測試

 

  1. var i:Int64 = 0  

  2.   

  3.   

  4. do{  

  5.     i++  

  6. } while  i * i < 100000  

  7.   

  8.   

  9. println("i = \(i)")  

  10. println("i * i = \(i * i)")  



輸出結果以下:
i = 317
i * i = 100489
該示例與上一節的示例是同樣的,都是找到平方數小於100 000的最大整數。輸出結果也是同樣的。
3、for語句
for語句是應用最普遍、功能最強的一種循環語句。通常格式以下: 
for 初始化; 循環條件; 迭代 {
  語句組
}
當程序執行到for語句時,會先執行初始化語句,它的做用是初始化循環變量和其餘變量,而後程序會查看循環條件是否知足,若是知足,則繼續執行循環體並計算迭代語句,以後再判斷循環條件,如此反覆,直到判斷循環條件不知足時跳出循環。終止語句通常用來改變循環條件,它可對循環變量和其餘變量進行操做。 
如下示例代碼是計算1~9的平方表程序: 

[html] view plaincopy

 

  1. println("n   n*n")  

  2. println("---------")  

  3. for var i = 1; i < 10; i++  {  

  4.     println("\(i) x \(i) = \(i * i)")  

  5. }  



輸出結果以下:
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

 

  1. var x:Int32  

  2. var y:Int32  

  3.   

  4.   

  5. for x = 0y = 10; x < y; x++, y--  {  

  6.     println("(x,y) = (\(x),\(y))")  

  7. }  



輸出結果以下:
(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

 

  1. let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

  2.   

  3.   

  4. println("----for-------")  

  5. for var i = 0; i < countElements(numbers); i++ {  

  6.     println("Count is: \(i)")  

  7. }  



輸出結果以下:
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

 

  1. let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];  

  2.   

  3.   

  4. println("----for in----")  

  5. for item in numbers {  

  6.     println("Count is: \(item)")  

  7. }  



輸出結果以下:
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課堂微信公共平臺

相關文章
相關標籤/搜索