一、條件語句
條件語句通過設定的一個或多個條件來執行程序,在條件為真時執行指定的語句,在條件為 false 時執行另外指定的語句。
可以通過下圖來簡單了解條件語句的執行過程:
Swift提供了以下幾種類型的條件語句:
1.if語句
if 語句 由一個布爾表達式和一個或多個執行語句組成。
Swift語言中if語句的語法:
if boolean_expression {
/* 如果布爾表達式為真將執行的語句 */
}
如果布爾表達式為 true,則 if 語句內的代碼塊將被執行。如果布爾表達式為 false,則 if 語句結束后的第一組代碼(閉括號后)將被執行。
實例:
var varA:Int = 10;
/* 檢測條件 */
if varA < 20 {
/* 如果條件語句為 true 執行以下程序 */
print("varA 小于 20");
}
print("varA 變量的值為 \(varA)");
當上面的代碼被編譯和執行時,它會產生下列結果:
varA 小于 20
varA 變量的值為 10
2.if...else語句
if 語句 后可以有可選的 else 語句, else 語句在布爾表達式為 false 時執行。
Swift語言中if..else語句的語法:
if boolean_expression
{
//如果為真,將執行
} else {
//如果為假,將執行
}
如果布爾表達式true,則執行if塊內的代碼。如果布爾表達式為false,則執行else塊內的代碼。
實例:
var varA : Int = 100
if varA < 20 {
print("varA 小于 20")
} else {
print("varA 小于 20")
}
print("varA 變量的值為\(varA)")
當上面的代碼被編譯執行時,它會產生下列結果:
varA 大于 20
varA 變量的值為 100
? : 運算符
我們已經在前面的章節中講解了 條件運算符 ? :,可以用來替代 if...else 語句。它的一般形式如下:
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表達式。請注意,冒號的使用和位置。
? 表達式的值是由 Exp1 決定的。如果 Exp1 為真,則計算 Exp2 的值,結果即為整個 ? 表達式的值。如果 Exp1 為假,則計算 Exp3 的值,結果即為整個 ? 表達式的值。
3.if...else if...else 語句
if 后可以有可選的 else if...else 語句, else if...else 語句常用于多個條件判斷。
使用 if , else if , else 語句時需要注意以下幾點:
1.if 語句后可以有 0 個或 1 個 else,但是如果 有 else if 語句,else 語句需要在 else if 語句之后。
2.if 語句后可以有 0 個或多個 else if 語句,else if 語句必須在 else 語句出現之前。
3.一旦 else 語句執行成功,其他的 else if 或 else 語句都不會執行。
語法:
if boolean_expression_1 {
/* 如果 boolean_expression_1 表達式為 true 則執行該語句 */
} else if boolean_expression_2 {
/* 如果 boolean_expression_2 表達式為 true 則執行該語句 */
} else if boolean_expression_3 {
/* 如果 boolean_expression_3 表達式為 true 則執行該語句 */
} else {
/* 如果以上所有條件表達式都不為 true 則執行該語句 */
}
實例:
var varA:Int = 100;
/* 檢測布爾條件 */
if varA == 20 {
/* 如果條件為 true 執行以下語句 */
print("varA 的值為 20");
} else if varA == 50 {
/* 如果條件為 true 執行以下語句 */
print("varA 的值為 50");
} else {
/* 如果以上條件都為 false 執行以下語句 */
print("沒有匹配條件");
}
print("varA 變量的值為 \(varA)");
當上面的代碼執行時,它會產生下列結果:
沒有匹配條件
varA 變量的值為 100
4.內嵌 if 語句
你可以在 if 或 else if 中內嵌 if 或 else if 語句。
語法:
if boolean_expression_1 {
/* 當 boolean_expression_1 表達式 true 時執行 */
if boolean_expression_2 {
/* 當 boolean_expression_1 表達式 true 時執行 */
}
}
實例:
var varA:Int = 100;
var varB:Int = 200;
if varA == 100 {
print("第一個條件為 true");
if varB == 200 {
print("第二個條件也是 true");
}
}
print("varA 變量的值為 \(varA)");
print("varB 變量的值為 \(varB)");
當上面的代碼執行時,它會產生下列結果:
第一個條件為 true
第二個條件也是 true
varA 變量的值為 100
varB 變量的值為 200
5.switch 語句
switch 語句允許測試一個變量等于多個值時的情況。Swift 語言中?只要匹配到 case 語句,則整個 switch 語句執行完成。
語法:
switch expression {
case expression1:
statement(s)
fallthrough
case expression2, expression3:
statement(s)
fallthrough
default:
statement(s);
}
一般在 switch 語句中不使用 fallthrough 語句。
這里我們需要注意 case 語句中如果沒有使用 fallthrough 語句,則在執行當前的 case 語句后,switch 會終止,控制流將跳轉到 switch 語句后的下一行。
如果使用了fallthrough 語句,則會繼續執行之后的 case 或 default 語句,不論條件是否滿足都會執行。
注意:在大多數語言中,switch 語句塊中,case 要緊跟 break,否則 case 之后的語句會順序運行,而在 Swift 語言中,默認是不會執行下去的,switch 也會終止。如果你想在 Swift 中讓 case 之后的語句會按順序繼續運行,則需要使用 fallthrough 語句。
實例1:
以下實例沒有使用fallthrough
var index = 10
switch index {
case 100 :
print( "index 的值為 100")
case 10,15 :
print( "index 的值為 10 或 15")
case 5 :
print( "index 的值為 5")
default :
print( "默認 case")
}
當上面的代碼被編譯執行時,結果為:index 的值為 10 或 15。
實例2
下列實例中使用fallthrough
var index = 10
switch index {
case 100 :
print( "index 的值為 100")
fallthrough
case 10,15 :
print( "index 的值為 10 或 15")
fallthrough
case 5 :
print( "index 的值為 5")
default :
print( "默認 case")
}
當上面的代碼被編譯執行時,結果為:index 的值為 10 或 15,index 的值為 5
二、循環語句
有時我們可能需要多次執行同一塊代碼。一般情況下,語句是按順序執行的:函數中的第一個語句先執行,接著是第二個語句,依此類推。
編程語言提供了更為復雜執行路徑的多種控制結構。
循環語句允許我們多次執行一個語句或語句組,下面是大多數編程語言中循環語句的?流程圖:
1.循環類型
Swift語言提供了一下幾種循環類型。
1.for-in
遍歷一個集合里面的所有元素,例如由數字表示的區間、數組中的元素、字符串中的字符。
Swift for-in 循環的語法格式如下:
for index in var {
循環體
}
實例1
for index in 1...5 {
print("\(index)")
}
//輸出結果為:1,2,3,4,5
例子中用來進行遍歷的元素是使用閉區間操作符(...)表示從1到5的數字區間
實例2
var someInts:[Int] = [10, 20, 30]
for index in someInts {
print( "index 的值為 \(index)")
}
以上程序執行輸出結果為:
index 的值為 10
index 的值為 20
index 的值為 30
2.for
該循環方式在 Swift 3 中已經棄用。
用來重復執行一系列語句直到達成特定條件達成,一般通過在每次循環完成后增加計數器的值來實現。
語法:
for init; condition; increment {
//此處寫循環體
}
參數分析:
1.init 會首先被執行,且只會執行一次。這一步允許您聲明并初始化任何循環控制變量。您也可以不在這里寫任何語句,只要有一個分號出現即可。
2.接下來,會判斷 condition。如果為真,則執行循環主體。如果為假,則不執行循環主體,且控制流會跳轉到緊接著 for 循環的下一條語句。
3.在執行完 for 循環主體后,控制流會跳回上面的 increment 語句。該語句允許您更新循環控制變量。該語句可以留空,只要在條件后有一個分號出現即可。
4.條件再次被判斷。如果為真,則執行循環,這個過程會不斷重復(循環主體,然后增加步值,再然后重新判斷條件)。在條件變為假時,for 循環終止。
實例:
var someInts:[Int] = [10, 20, 30]
for var index = 0; index < 3; ++index {
print( "索引 [\(index)] 對應的值為 \(someInts[index])")
}
以上程序執行輸出結果為:
索引 [0] 對應的值為 10
索引 [1] 對應的值為 20
索引 [2] 對應的值為 30
3.while
運行一系列語句,如果條件為true,會重復運行,直到條件變為false。
語法:
while condition {
statement(s)
}
語法中的 statement(s) 可以是一個語句或者一個語句塊。 condition 可以是一個表達式。如果條件為true,會重復運行一系列語句,直到條件變為false。
數字 0, 字符串 '0' 和 "", 空的 list(), 及未定義的變量都為 false ,其他的則都為 true。true 取反使用 ! 號或 not,取反后返回 false。
實例:
var index = 10
while index < 20
{
print( "index 的值為 \(index)")
index = index + 1
}
以上程序執行輸出結果為:
index 的值為 10
index 的值為 11
index 的值為 12
index 的值為 13
index 的值為 14
index 的值為 15
index 的值為 16
index 的值為 17
index 的值為 18
index 的值為 19
4.repeat...while
似 while 語句區別在于判斷循環條件之前,先執行一次循環的代碼塊。
語法:
repeat {
statement(s);
} while (condition);
注意,條件表達式出現在循環的尾部,所以循環中的 statement(s) 會在條件被測試之前至少執行一次。
如果條件為 true,控制流會跳轉回上面的 repeat,然后重新執行循環中的 statement(s)。這個過程會不斷重復,直到給定條件變為 false 為止。
數字 0, 字符串 '0' 和 "", 空的 list(), 及未定義的變量都為 false ,其他的則都為 true。true 取反使用 ! 號或 not,取反后返回 false。
實例:
var index = 15
repeat {
print( "index 的值為 \(index)")
index = index + 1
} while index < 20
以上程序執行輸出結果為:
index 的值為 15
index 的值為 16
index 的值為 17
index 的值為 18
index 的值為 19
2.循環控制語句
循環控制語句改變你代碼的執行順序,通過它你可以實現代碼的跳轉。
1.continue
Swift continue語句告訴一個循環體立刻停止本次循環迭代,重新開始下次循環迭代。
對于 for 循環,continue 語句執行后自增語句仍然會執行。對于 while 和 do...while 循環,continue 語句重新執行條件判斷語句。
實例:
var index = 10
repeat {
index = index + 1
if ( index == 15 ) { // index 等于 15 時跳過
continue
}
print( "index 的值為 \(index)")
} while index < 20
以上程序執行輸出結果為:
index 的值為 11
index 的值為 12
index 的值為 13
index 的值為 14
index 的值為 16
index 的值為 17
index 的值為 18
index 的值為 19
index 的值為 20
2.break
Swift break語句會立刻結束整個控制流的執行。
如果您使用的是嵌套循環(即一個循環內嵌套另一個循環),break 語句會停止執行最內層的循環,然后開始執行該塊之后的下一行代碼。
實例:
var index = 10
repeat{
index = index + 1
if ( index == 15 ) { // index 等于 15 時終止循環
break
}
print( "index 的值為 \(index)")
} while index < 20
以上程序執行輸出結果為:
index 的值為 11
index 的值為 12
index 的值為 13
index 的值為 14
3.fallthrough
Swift fallthrough 語句讓 case 之后的語句會按順序繼續運行,且不論條件是否滿足都會執行。
Swift 中的 switch 不會從上一個 case 分支落入到下一個 case 分支中。只要第一個匹配到的 case 分支完成了它需要執行的語句,整個switch代碼塊完成了它的執行。
注意:在大多數語言中,switch 語句塊中,case 要緊跟 break,否則 case 之后的語句會順序運行,而在 Swift 語言中,默認是不會執行下去的,switch 也會終止。如果你想在 Swift 中讓 case 之后的語句會按順序繼續運行,則需要使用 fallthrough 語句。
實例1:
var index = 10
switch index {
case 100 :
print( "index 的值為 100")
case 10,15 :
print( "index 的值為 10 或 15")
case 5 :
print( "index 的值為 5")
default :
print( "默認 case")
}
當上面的代碼被編譯執行時,結果:
index 的值為 10 或 15
實例2:
var index = 10
switch index {
case 100 :
print( "index 的值為 100")
fallthrough
case 10,15 :
print( "index 的值為 10 或 15")
fallthrough
case 5 :
print( "index 的值為 5")
default :
print( "默認 case")
}
當上面的代碼被編譯執行時,結果:
index 的值為 10 或 15
index 的值為 5