iOS開發Swift篇—(六)流程控制

一、swift中的流程控制

Swift支持的流程結構如下:

循環結構:for、for-in、while、do-while

選擇結構:if、switch

注意這些語句後面一定要跟上大括號{},在C語言中不是必須的

 

說明:跟C語言對比,用法基本一樣的有:for、while、do-while、if

  因此,只需要關注for-in和switch即可

 

二、for-in結構

簡單使用:

for-in和範圍運算符

for i in 1...3 {

    println(i)

}

// 按順序從範圍中取值賦值給i,每取1次值,就執行1次循環體

// 範圍的長度就是循環體執行的次數

  代碼示例:

     

提示:如果不需要用到範圍中的值,可以使用下劃線 _ 進行忽略

for _ in 1...3 {

    println("*********")

}

代碼示例:

  

注意i爲常量,其值是不能改變的。

 

三、switch的使用

1.使用示例:

複製代碼
 1 let grade = "B"
 2 switch grade {
 3 case "A":
 4     println("優秀等級")
 5 case "B":
 6     println("良好等級")
 7 case "C":
 8     println("中等等級")
 9 default:
10     println("未知等級")
11 }
複製代碼

2.switch語句在 Swift 和 C 中的區別:

在C語言中,如果case的結尾沒有break,就會接着執行下一個case或者default語句

在Swift中,不需要在每一個case後面增加break,執行完case對應的代碼後默認會自動退出switch語句

3.switch的注意點

在Swift中,每一個case後面必須有可以執行的語句

複製代碼
1 let grade = "B”
2 switch grade {
3 case "A":
4 case "B":
5     println("良好等級")
6 default:
7     println("未知等級")
8 }
複製代碼

說明:第二行代碼會報錯

4.case的多條件匹配

  1個case後面可以填寫多個匹配條件,條件之間用逗號,隔開

複製代碼
 1 let score = 95
 2 switch score/10 {
 3 case 10, 9:
 4     println("優秀")
 5 case 8, 7, 6:
 6     println("及格")
 7 default:
 8     println("不及格")
 9 }
10 // 打印結果是:優秀
複製代碼

5.case的範圍匹配

case後面可以填寫一個範圍作爲匹配條件

複製代碼
 1 let score = 95
 2 switch score {
 3 case 90...100:
 4     println("優秀")
 5 case 60...89:
 6     println("及格")
 7 default:
 8     println("不及格")
 9 }
10 // 打印結果是:優秀
複製代碼

注意

switch要保證處理所有可能的情況,不然編譯器直接報錯

因此,這裏的default一定要加,不然就出現了一些處理不到的情況

6.case匹配元組

case還可以用來匹配元組。比如判斷一個點是否在右圖的藍色矩形框內

複製代碼
 1 let point = (1, 1)
 2 switch point {
 3 case (0, 0) :
 4     println("這個點在原點上")
 5 case (_, 0) :
 6     println("這個點在x軸上")
 7 case (0, _) :
 8     println("這個點在y軸上")
 9 case (-2...2, -2...2) :
10     println("這個點在矩形框內")
11 default:
12     println("這個點在其他位置")
13 }
複製代碼

  

第5行中 _ 的作用(2種理解方式)

(1)能匹配任何值

(2)忽略對應位置元組元素

7.case的數值綁定

  在case匹配的同時,可以將switch中的值綁定給一個特定的常量或者變量,以便在case後面的語句中使用

複製代碼
 1 let point = (10, 0)
 2 switch point {
 3 case (let x, 0) :
 4     println("這個點在x軸上, x值是\(x)")
 5 case (0, let y) :
 6     println("這個點在y軸上, y值是\(y)")
 7 case let (x, y) :
 8     println("這個點的x值是\(x), y值是\(y)")
 9 }
10 
11 // 打印:這個點在x軸上, x值是10
複製代碼

8.where

switch語句可以使用where來增加判斷的條件。比如判斷一個點是否在右圖的綠線或者紫線上

複製代碼
 1 var point = (10, -10)
 2 switch point {
 3 case let (x, y) where x == y :
 4     println("這個點在綠線上")
 5 case let (x, y) where x == -y :
 6     println("這個點在紫線上")
 7 default :
 8     println("這個點不在這2條線上")
 9 }
10 // 打印:這個點在紫線上
複製代碼

  

9.fallthrough的作用

執行完當前case後,會接着執行fallthrough後面的case或者default語句

複製代碼
 1 let num = 20
 2 var str = "\(num)是個"
 3 switch num {
 4 case 0...50 :
 5     str += "0~50之間的"
 6       fallthrough
 7 default :
 8     str += "整數"
 9 }
10 println(str)
11 // 打印:20是個0~50之間的整數
複製代碼

注意:fallthrough後面的case條件不能定義變量和常量

10.標籤

使用標籤的其中1個作用:可以用於明確指定要退出哪個循環

複製代碼
 1 // 做2組俯臥撐,每組3個,做完一組就休息一會
 2 group :
 3 for _ in 1...2 {
 4     for item in 1...3 {
 5         println("做1個俯臥撐")
 6         if item == 2 {
 7             break group
 8         }
 9     }
10     println("休息一會")
11 }
複製代碼

輸出結果是

做1個俯臥撐

做1個俯臥撐

代碼示例:

  

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章