麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Swift > 正文

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

2020-03-09 17:49:04
字體:
供稿:網(wǎng)友
這篇文章主要介紹了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"  
}
  
可以說是史上支持?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ù)類型一致,不過元組還有一項(xiàng)特點(diǎn),對(duì)于不想關(guān)心的值,可以用下劃線_跳過,如:
復(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)心的值跳過,只要滿足另一個(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è)值提取出來,然后直接在下面使用:
復(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放在外面和放在里面為每一個(gè)元素單獨(dú)寫上let是等價(jià)的。
當(dāng)你在一個(gè)case里使用Value Binding的時(shí)候,如果你同時(shí)也在它的上一個(gè)case里使用了fallthrough,這是編譯器所不允許的,你可能會(huì)收到這樣一個(gè)編譯錯(cuò)誤:
 條件切換語(yǔ)句,case,Swift
只要把下面的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)"//被輸出:"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)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 99re热视频这里只精品 | 欧洲伊人网 | 免费毛片在线视频 | 天天曰夜夜操 | 操碰视频在线观看 | 色999国产 | 国产精品999在线观看 | 欧美aaaaaaaa | 欧美视频在线观看一区 | 亚洲成人激情在线 | 亚洲av一级毛片特黄大片 | 久久久久久久亚洲精品 | 黄在线看| 羞羞的视频免费在线观看 | 免费观看黄色影片 | 911精品影院在线观看 | 国产精品亚洲精品日韩已方 | 精品国产一区二区三 | 麻豆国产一区 | 小视频免费在线观看 | 91午夜在线观看 | 精国品产一区二区三区有限公司 | 99精品欧美一区二区 | chinese中国真实乱对白 | 一级大黄毛片 | 国产噜噜噜噜久久久久久久久 | h视频在线播放 | 亚洲福利在线视频 | 久久亚洲一区二区三区成人国产 | 销魂美女一区二区 | 中文字幕一区久久 | 女人一级一级毛片 | 久久精品美乳 | 免费久久精品 | 国产精品视频六区 | 51色视频| 黄色影院在线看 | 在线观看一区二区三区四区 | 精品国产乱码一区二区 | 免费看搡女人无遮挡的视频 | 欧美性生活免费视频 |