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