欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

語法
Swift 語言中 switch 語句的語法:

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

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

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


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

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

復(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" 
}
 
可以說是史上支持?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" 
}
 
對某個數(shù)值區(qū)間進(jì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ān)心的值,可以用下劃線_跳過,如:
復(fù)制代碼 代碼如下:

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

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

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


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

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


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

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

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

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


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

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

復(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" 


這同樣很酷,相信在某種情況下會派上大用場。

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

相關(guān)文章

  • 使用?Swift?Package?插件生成代碼的示例詳解

    使用?Swift?Package?插件生成代碼的示例詳解

    這篇文章主要介紹了使用?Swift?Package?插件生成代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Swift?reduce函數(shù)使用示例詳解

    Swift?reduce函數(shù)使用示例詳解

    這篇文章主要為大家介紹了Swift?reduce函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • RxSwift學(xué)習(xí)教程之基礎(chǔ)篇

    RxSwift學(xué)習(xí)教程之基礎(chǔ)篇

    RxSwift是Swift函數(shù)響應(yīng)式編程的一個開源庫,由Github的ReactiveX組織開發(fā),維護(hù)。下面這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)之基礎(chǔ)篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Swift編程中的switch...case語句實例解析

    Swift編程中的switch...case語句實例解析

    這篇文章主要介紹了Swift編程中的switch...case語句實例解析,其中重點還是對于fallthrough關(guān)鍵字用法的講解,需要的朋友可以參考下
    2016-04-04
  • Swift編程中用以管理內(nèi)存的自動引用計數(shù)詳解

    Swift編程中用以管理內(nèi)存的自動引用計數(shù)詳解

    這篇文章主要介紹了Swift編程中用以管理內(nèi)存的自動引用計數(shù)詳解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Swift?中?Opaque?Types學(xué)習(xí)指南

    Swift?中?Opaque?Types學(xué)習(xí)指南

    這篇文章主要為大家介紹了Swift?中?Opaque?Types學(xué)習(xí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 初探Swift3.0帶來的變化匯總

    初探Swift3.0帶來的變化匯總

    這個周末抽空看了下swift3.0的變化,今天小編通過本教程給大家分享Swift3.0帶來的變化,非常不錯,感興趣的朋友參考下吧
    2016-12-12
  • swift?cell自定義左滑手勢處理方法

    swift?cell自定義左滑手勢處理方法

    這篇文章主要介紹了swift?cell自定義左滑手勢處理,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例

    Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPr

    這篇文章主要為大家介紹了Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift hello world!Swift快速入門教程

    Swift hello world!Swift快速入門教程

    這篇文章主要介紹了Swift hello world!Swift快速入門教程,本文在快速了解Swift編程語言,需要的朋友可以參考下
    2014-07-07

最新評論