Swift: 6.3 語句和流程控制--控制轉移語句
控制轉移語句(Control Transfer Statement)通過把控制權從一個代碼位轉移到另外一個代碼位來改變代碼的執行順序。在Swift語言中,提供了如下所示的5種控制轉移語句。
- continue
- break
- fallthrough
- return
- throw
本章只介紹continue、break 和 fallthrough 這三種控制語句。return 語句將會在函數章節講解,throw語句將會在異常處理章節講解。
continue
Swift中的continue語句跟Objective-C中的一樣,當遇到continue語句的時候,立即停止本次循環,并且開始下一次的循環,并不會離開循環體。
let input = "Hello Swift~"
var ouput = ""
let charactersToRemove: [Character] = ["a", "e", "i", "o", "u", " "]
for character in input.characters {
if charactersToRemove.contains(character) {
continue
} else {
ouput.append(character)
}
}
print(ouput)
//打印結果:HllSwft~
break
break語句會立刻結束整個控制流的執行。當想要更早地結束一個switch代碼塊或者一個循環體時,都可以使用break語句來實現。
- 當在循環體中使用break語句時,會立即停止本次循環,然后跳轉到循環體結束符大括號的(})的后一條語句。
let input = "我是被一條語句"
let keywords:Character = "一"
var count = 0
for chara in input.characters {
count += 1
if(chara == keywords){
print("找到了")
break;
}
}
print("循環執行了\(count)次")
//打印結果:
//找到了
//循環執行了4次
- 當在一個switch代碼塊中使用break時,會立即中斷該switch代碼塊的執行,并且跳轉到表示 switch 代碼塊結束的大括號(})后的第一行代碼。這個特性可以被用來匹配或者忽略一個或多個分支。因為 Swift 的 switch 需要包含所有的分支而且不允許有為空的分支,有時為了使我們的意圖更明顯,需要特意匹配或者忽略某個分支。那么當想忽略某個分支時,可以在該分支內寫上break語句。當那個分支被匹配到時,分支內的break語句立即結束switch代碼塊。
let num = 5
var bigChineseNum = ""
switch num {
case 1:
bigChineseNum = "壹"
case 2:
bigChineseNum = "貳"
case 3:
bigChineseNum = "叁"
case 4:
bigChineseNum = "肆"
case 5:
bigChineseNum = "伍"
case 6:
bigChineseNum = "陸"
default:
break
}
print(bigChineseNum)
//打印結果:伍
fallthrough
switch不會從上一個case分支落入到下一個case分支中。相反,只要第一個匹配到的 case 分支完成了它需要執行的語句,整個 switch 代碼塊完成了它的執行。相比之下,C語言要求顯示地插入break語句到每個switch分支的末尾來阻止自動落入到下一個case分支中。Swift 的這種避免默認落入到下一個分支中的特性,意味著其 switch 功能要比 C 語言的更加清晰和可預測,可以避免無意識地執行多case分支而引發不必要錯誤的情形。
在Swift 語言中,如果確實需要 C 風格的貫穿(fallthrough)的特性,可以在每個需要該特性的 case 分支中使用fallthrough 關鍵字。例如,在下面的例子中,使用關鍵字fallthrough創建了一個數字的描述語句。
let integerToDescribe = 5
var description = " \(integerToDescribe)是一個"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += "質數,同時也是一個"
fallthrough
default:
description += "正整數。"
}
print(description)
// 打印結果: 5是一個質數,同時也是一個正整數。
示例代碼
https://github.com/99ios/23.6.3