Swift - 條件語句、循環(huán)語句

一、條件語句

條件語句通過設定的一個或多個條件來執(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

下一篇:“Swift - 字符串、字符” http://www.lxweimin.com/p/ce8a1082311f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內(nèi)容