Swift 十二講 第五章 Ifelse/for/while/Switch loop

Swift的控制流和其他語言區(qū)別不大查乒。只有switch的細(xì)節(jié)稍微多一些敦锌,更強大一些您机。讀者應(yīng)多加注意。

1. For 循環(huán)

For循環(huán)有兩種寫法脖祈。第一種和C基本一樣(除了括號可以省去)损拢。

  • 第一種的寫法是: 變量初始化;終止條件:變量增加的步長。 例如:

    for var i = 0; i<2; i = i+1
    {
    println(i)  //playground里面輸出0,1
    }
    

語法解析的過程為:i首先被初始化為0撒犀。每一次執(zhí)行循環(huán)體之前福压,檢查是否滿足條件i<2,如果是,那么執(zhí)行或舞。如果否荆姆,那么終止。每次循環(huán)體執(zhí)行結(jié)束后映凳,i 的值加1胆筒。

  • 第二種寫法是: for 常量 in 有序集合。例如:
var str = "abc"
 
 var reverseStr = ""
 
 for ii in str {
    println(ii)
    reverseStr = String(ii) + reverseStr
    println(reverseStr)
 }
 //最后reverStr為"cba",也就是求出了string的逆序排列诈豌。

for in Loops也可以遍歷字典來做循環(huán)仆救。因為字典包含的項比較復(fù)雜,所以要特別小心檢查循環(huán)條件和循環(huán)體矫渔。另外注意字典被循環(huán)的時候彤蔽,遍歷順序是隨機的。這是因為字典不以位置來檢索庙洼,所以并不是先按第一個位置來進(jìn)行這樣子顿痪。

2. While循環(huán)同樣有兩種

  • 純while循環(huán)的語法如下:

while 某判斷條件
{
做一些事情
}

就是當(dāng)條件滿足是,不停的執(zhí)行循環(huán)體油够。每次執(zhí)行完蚁袭,再檢查是否滿足。例如:

 var i = 1
 while i<5
 {
 println(i)
    i++
 }  輸出為1 2 3 4

*do while循環(huán)

do while循環(huán)先做do后面的循環(huán)體石咬,然后判斷條件是否滿足揩悄。所以do while循環(huán),至少執(zhí)行一遍循環(huán)體鬼悠。無論條件是否滿足删性。

 var i = 1
 do
 {
 println(i)
    i++
 } while i < -1  //輸出為1棉饶。

3. continue和break

你可以在循環(huán)體內(nèi)任何地方使用continue。其作用是終止當(dāng)前的循環(huán)體執(zhí)行镇匀,開始下一次循環(huán)。for語句前面可以加標(biāo)簽袜啃。continue后面可以跟隨標(biāo)簽汗侵,就像GoTo語句一樣,直接跳到被標(biāo)簽的語句處群发。
你可以在循環(huán)體內(nèi)任何地方使用break晰韵。其作用是直接去執(zhí)行循環(huán)后的下一個語句。也就是完全跳出了循環(huán)熟妓。

4. if-else

if-else的最基本的寫法為:

if 條件 {做些事情}
else {做些事情}

注意大括號不能省略雪猪。另外else if也是支持的。如下例:

 var i = 1
 if i == 1 {println("三年又三年");
 i = i+1 }
 else {println("大家吃雞蛋")}
//注意雖然i后來等于2了起愈,但是"大家吃雞蛋不會被執(zhí)行"只恨。因為前面判斷的時候i == 1

5. case switch

  • switch case的寫法和C非常相似。但有兩點關(guān)鍵不同抬虽。
    (1)我們不需要在每個case里面放break官觅。默認(rèn)情況完成case后面的執(zhí)行語句后,自動跳出阐污。(2)fallthrough關(guān)鍵字可以讓一個case后面的另一個case里的執(zhí)行句被執(zhí)行休涤。 另外,case必須窮舉一切可能笛辟,不然就必須寫default功氨。下面例子清楚的說明了這些特點:

    var i = 1
    switch i
    {
    case 1:
    println(i)
    fallthrough
    case 2:
    println("好")
    default:
    println(2)
    }
    //輸出為: 1 好

上面執(zhí)行過程是這樣的:因為i==1, 所以第一個println被執(zhí)行。因為有fallthrough,所以第二個println被執(zhí)行手幢。第三個println不會被執(zhí)行捷凄。

  • switch/case支持使用tuple。在case判斷句里面围来,可以使用"_"表示此元素?zé)o論是什么都匹配纵势。還可以用var和let定義一個名字,表示此元素?zé)o論是什么都匹配管钳,而這個變量或者常量就是此元素的一個內(nèi)部復(fù)制钦铁。如下例:

    var T = (9,"九", "nine")

    switch T
    {
    case (_,let a,"nine") :
    println(a)
    default:
    println()
    } //輸出為 "九"

以上語句執(zhí)行過程為:case后面的tuple, _表示第一個元素是什么都行。所以T匹配這個元素才漆。let a, 第二個元素表示第二個元素是什么都可以牛曹,所以也匹配。同時第二個元素被復(fù)制到a里面醇滥。第三個元素一定要是"nine"黎比,檢查發(fā)現(xiàn)也匹配超营。所以去執(zhí)行println(a)。

  • Switch/Case里面可以用where:

    var T = (9,"九", "nine")
    
    switch T
    {
    case (_,let a,let b) where b.hasPrefix("n") :
      println("\(a)")
    default:
      println()
    }
    

上述語句輸出同樣為"九"阅虫。第三個條件解釋為:必須前綴是"n" 才匹配演闭。

最后,switch/case可以在聚合體上使用颓帝。我們將在下一章講解聚合體時候解釋米碰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市购城,隨后出現(xiàn)的幾起案子吕座,更是在濱河造成了極大的恐慌,老刑警劉巖瘪板,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吴趴,死亡現(xiàn)場離奇詭異,居然都是意外死亡侮攀,警方通過查閱死者的電腦和手機锣枝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兰英,“玉大人惊橱,你說我怎么就攤上這事〖牵” “怎么了税朴?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長家制。 經(jīng)常有香客問我正林,道長,這世上最難降的妖魔是什么颤殴? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任觅廓,我火速辦了婚禮,結(jié)果婚禮上涵但,老公的妹妹穿的比我還像新娘杈绸。我一直安慰自己,他們只是感情好矮瘟,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布瞳脓。 她就那樣靜靜地躺著,像睡著了一般澈侠。 火紅的嫁衣襯著肌膚如雪劫侧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音烧栋,去河邊找鬼写妥。 笑死,一個胖子當(dāng)著我的面吹牛审姓,可吹牛的內(nèi)容都是我干的珍特。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼魔吐,長吁一口氣:“原來是場噩夢啊……” “哼扎筒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起画畅,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宋距,沒想到半個月后轴踱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谚赎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年淫僻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壶唤。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡雳灵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闸盔,到底是詐尸還是另有隱情悯辙,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布迎吵,位于F島的核電站躲撰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏击费。R本人自食惡果不足惜拢蛋,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔫巩。 院中可真熱鬧谆棱,春花似錦、人聲如沸圆仔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坪郭。三九已至皆警,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間截粗,已是汗流浹背信姓。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工鸵隧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人意推。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓豆瘫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菊值。 傳聞我的和親對象是個殘疾皇子外驱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,826評論 0 6
  • Swift 提供了類似 C 語言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的for和while循環(huán)腻窒,基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 690評論 1 1
  • 1 順序語句 語句:使用分號分隔的代碼稱作為一個語句昵宇。 注意:沒有寫任何代碼只是一個分號的時候,也是一條語句儿子,...
    哈哈哎呦喂閱讀 373評論 0 0
  • 打開目錄君原文:《Empress Orchid》 作者:Anchee Min 翻譯:半耳月亮 一天早晨瓦哎,當(dāng)我梳頭的...
    半耳月亮閱讀 862評論 14 8
  • 前段時間在網(wǎng)絡(luò)上有篇很火的文章《啪啪啪最見人品》,我想說拋開男孩子的問題柔逼,女孩兒也有問題蒋譬。 非得等到啪啪啪的時候才...
    琢愛舟閱讀 18,691評論 42 111