最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift中的條件切換語(yǔ)句switch...case學(xué)習(xí)教程

 更新時(shí)間:2016年04月13日 11:16:45   作者:Bannings  
這篇文章主要介紹了Swift中的條件切換語(yǔ)句switch...case學(xué)習(xí)教程,Swift中的switch...case支持的數(shù)據(jù)類型很多,非常之強(qiáng)大,需要的朋友可以參考下

語(yǔ)法
Swift 語(yǔ)言中 switch 語(yǔ)句的語(yǔ)法:

復(fù)制代碼 代碼如下:

switch expression {
   case expression1  :
      statement(s)
      fallthrough /* 可選 */
   case expression2, expression3  :
      statement(s)
      fallthrough /* 可選 */

   default : /* 可選 */
      statement(s);
}


注意:在大多數(shù)語(yǔ)言中,switch 語(yǔ)句塊中,case 要緊跟 break,否則 case 之后的語(yǔ)句會(huì)順序運(yùn)行,而在 Swift 語(yǔ)言中,默認(rèn)是不會(huì)執(zhí)行下去的,switch 也會(huì)終止。如果你想在 Swift 中讓 case 之后的語(yǔ)句會(huì)按順序繼續(xù)運(yùn)行,則需要使用 fallthrough 語(yǔ)句。
需要注意的地方有兩點(diǎn):
Switch當(dāng)然也支持顯式的break,通常只有一種情況下你會(huì)這么做,那就是當(dāng)你也不想在default里做任何事情的時(shí)候,這個(gè)時(shí)候你就可以在default里顯式地加上一句break。
fallthrough并不是在任何情況下都有效,當(dāng)你在Switch里使用Value Binding技術(shù)的時(shí)候,fallthrough就被禁止了。Value Binding在下面會(huì)講到。

支持多種數(shù)據(jù)類型
在Objective-C里,Switch語(yǔ)句只能支持整形的數(shù)據(jù)(或者一個(gè)字符),但是在Swift里,Switch能支持多種數(shù)據(jù)類型,包括浮點(diǎn)、布爾、字符串等:
支持浮點(diǎn):

復(fù)制代碼 代碼如下:

let float = 1.5 
switch float { 
    case 1.5: 
        "1.5"   //被輸出 
    default: 
        "default" 


支持布爾:
復(fù)制代碼 代碼如下:

let isSuccess = true 
switch isSuccess { 
    case true: 
        "true"   //被輸出 
    default: 
        "default" 


支持字符串:
復(fù)制代碼 代碼如下:

let name = "Bannings" 
switch name { 
    case "Bannings": 
        "Bannings"   //被輸出 
    default: 
        "default" 
}
 
可以說(shuō)是史上支持?jǐn)?shù)據(jù)類型最多的Switch了。

支持區(qū)間運(yùn)算符
不僅僅是循環(huán)結(jié)構(gòu)里可以用區(qū)間運(yùn)算符,在Switch里同樣可以用區(qū)間運(yùn)算符:

復(fù)制代碼 代碼如下:

var i = 15 
switch i { 
    case 0 ... 10: 
        "0~10" 
    case 11 ... 20: 
        "11~20" //被輸出 
    default: 
        "default" 
}
 
對(duì)某個(gè)數(shù)值區(qū)間進(jìn)行批量匹配,這樣是不是很酷?浮點(diǎn)數(shù)也同樣支持區(qū)間運(yùn)算符。

支持元組
作為被大大增強(qiáng)的Switch,元組也是被支持的:

復(fù)制代碼 代碼如下:

let request = (true,"success") 
switch request { 
    case (true, "success"): 
        "success"   //被輸出 
    case (false, "failed"): 
        "failed" 
    default: 
        "default" 
}

使用元組和使用其他數(shù)據(jù)類型一致,不過(guò)元組還有一項(xiàng)特點(diǎn),對(duì)于不想關(guān)心的值,可以用下劃線_跳過(guò),如:
復(fù)制代碼 代碼如下:

let (name,  _, age) = ("Bannings" ,true, 22) 

那么在使用Switch時(shí),同樣支持這項(xiàng)特性:
復(fù)制代碼 代碼如下:

let request = (true,"success") 
switch request { 
    case (_, "success"): 
        "success"   //被輸出 
    case (false, _): 
        "failed" 
    default: 
        "default" 


對(duì)于不關(guān)心的值跳過(guò),只要滿足另一個(gè)值就行了。需要注意一點(diǎn)的是,如果元組中的值也是數(shù)字類型,那么也是可以用區(qū)間運(yùn)算符的:
復(fù)制代碼 代碼如下:

let request = (10,"failed") 
switch request { 
    case (_, "success"): 
        "success" 
    case (1 ... 10, _): 
        "1~10"    //被輸出 
    default: 
        "default" 


Value Binding
針對(duì)元組,Switch還支持類似于Optional Binding的Value Binding,就是能把元組中的各個(gè)值提取出來(lái),然后直接在下面使用:
復(fù)制代碼 代碼如下:

let request = (0,"success") 
switch request { 
    case (0, let state): 
        state    //被輸出:success 
    case (let errorCode, _): 
        "error code is \(errorCode)" 
}  // 涵蓋了所有可能的case,不用寫(xiě)default了 

這樣也是可以的:
復(fù)制代碼 代碼如下:

let request = (0,"success") 
switch request { 
    case let (errorCode, state): 
        state    //被輸出:success 
    case (let errorCode, _): 
        "error code is \(errorCode)" 


把let放在外面和放在里面為每一個(gè)元素單獨(dú)寫(xiě)上let是等價(jià)的。
當(dāng)你在一個(gè)case里使用Value Binding的時(shí)候,如果你同時(shí)也在它的上一個(gè)case里使用了fallthrough,這是編譯器所不允許的,你可能會(huì)收到這樣一個(gè)編譯錯(cuò)誤:
 2016413111645305.jpg (590×121)
只要把下面的errorCode去掉就行了,當(dāng)然,考慮好自己的邏輯。

支持額外的邏輯判斷
在使用Switch語(yǔ)句時(shí),Switch會(huì)適當(dāng)?shù)貙?dǎo)向相應(yīng)的case部分,這其實(shí)就相當(dāng)于做了一次邏輯判斷,但Swift的Switch語(yǔ)句還支持額外的邏輯判斷:

復(fù)制代碼 代碼如下:

let request = (0,"success") 
switch request { 
    case (0, let state) where state != "success": 
        state 
    case (let errorCode, _): 
        "error code is \(errorCode)"http://被輸出:"error code is 0" 


這同樣很酷,相信在某種情況下會(huì)派上大用場(chǎng)。

總結(jié)
Swift對(duì)Switch進(jìn)行了大大增強(qiáng),使Switch的靈活性得到了很大提升,這是激動(dòng)人心的改變,但是如果掌控不好其中的變化,可能會(huì)使你在進(jìn)行錯(cuò)誤排查時(shí)增加難度,也會(huì)使代碼復(fù)雜度變高。在適當(dāng)?shù)貢r(shí)候靈活運(yùn)用,保持頭腦清晰總是有益的。

相關(guān)文章

  • SwiftUI 中創(chuàng)建反彈動(dòng)畫(huà)的實(shí)現(xiàn)

    SwiftUI 中創(chuàng)建反彈動(dòng)畫(huà)的實(shí)現(xiàn)

    這篇文章主要介紹了SwiftUI 中創(chuàng)建反彈動(dòng)畫(huà)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Swift、Objective-C、Cocoa混合編程設(shè)置指南

    Swift、Objective-C、Cocoa混合編程設(shè)置指南

    這篇文章主要介紹了Swift、Objective-C、Cocoa混合編程設(shè)置指南,需要的朋友可以參考下
    2014-07-07
  • swift 3.0中realm封裝類示例代碼

    swift 3.0中realm封裝類示例代碼

    這篇文章主要給大家介紹了關(guān)于swift 3.0中realm封裝類的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 關(guān)于swift的個(gè)人小結(jié)

    關(guān)于swift的個(gè)人小結(jié)

    本文是個(gè)人對(duì)于目前學(xué)習(xí)swift的一些心得的匯總,這里分享給大家,希望大家能夠喜歡
    2016-12-12
  • Swift學(xué)習(xí)筆記之構(gòu)造器重載

    Swift學(xué)習(xí)筆記之構(gòu)造器重載

    Swift 將為所有屬性已提供默認(rèn)值的且自身沒(méi)有定義任何構(gòu)造器的結(jié)構(gòu)體或基類,提供一個(gè)默認(rèn)的構(gòu)造器。這個(gè)默認(rèn)構(gòu)造器將簡(jiǎn)單的創(chuàng)建一個(gè)所有屬性值都設(shè)置為默認(rèn)值的實(shí)例。
    2014-11-11
  • swift3.0指紋解鎖的實(shí)現(xiàn)方法

    swift3.0指紋解鎖的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了swift3.0指紋解鎖的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Swift實(shí)現(xiàn)快速排序算法的代碼示例

    Swift實(shí)現(xiàn)快速排序算法的代碼示例

    這篇文章主要介紹了Swift實(shí)現(xiàn)快速排序算法的代碼示例,首先利用分治法講解了快速排序的思路,需要的朋友可以參考下
    2016-07-07
  • Swift初始化方法的使用介紹

    Swift初始化方法的使用介紹

    Swift有著超級(jí)嚴(yán)格的初始化方法,不僅強(qiáng)化了designated初始化方法的地位,所有不加修飾的init方法都需要在方法中確保非Optional的實(shí)例變量被賦值初始化,下面這篇文章主要給大家介紹了關(guān)于Swift中初始化init的相關(guān)資料,需要的朋友可以參考下。
    2022-08-08
  • Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹

    Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹

    這篇文章主要介紹了Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹,在Swift中有一類很有意思的寫(xiě)法,可以讓我們不直接使用實(shí)例來(lái)調(diào)用這個(gè)實(shí)例上的方法,而是通過(guò)類型取出這個(gè)類型的某個(gè)實(shí)例方法的簽名,然后再通過(guò)傳遞實(shí)例來(lái)拿到實(shí)際需要調(diào)用的方法,需要的朋友可以參考下
    2015-01-01
  • swift中可選值?和!使用的方法示例

    swift中可選值?和!使用的方法示例

    這篇文章主要給大家介紹了關(guān)于swift中可選值?和!使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11

最新評(píng)論

丰宁| 成都市| 兰西县| 长沙市| 沅陵县| 兴化市| 日照市| 天祝| 旺苍县| 抚顺县| 南宫市| 双鸭山市| 汽车| 花垣县| 绵竹市| 玉屏| 林甸县| 宁都县| 浮梁县| 霍山县| 肇州县| 林口县| 永寿县| 罗甸县| 霍林郭勒市| 阿拉尔市| 荃湾区| 葫芦岛市| 三穗县| 崇文区| 虹口区| 宜良县| 南澳县| 榆中县| 禄丰县| 福建省| 嘉兴市| 泸定县| 日土县| 鄂伦春自治旗| 湟中县|