402,Swift和NSObject中Switch 的用法的區(qū)別(面試點:swift中switch中case:可以表示范圍拟枚,每個case后面必須有可執(zhí)行的語句薪铜,可以匹配元組,case的數(shù)值綁定恩溅,...

一隔箍,OC中的Switch語句

1、switch語句分支必須是整數(shù)
2脚乡、每個語句都需要一個break
3蜒滩、如果要穿透,case連著寫。 如:case 9: case 10:

二奶稠,Swift中的switch:

1俯艰、可以針對任意類型的值進行分支,不再局限于整數(shù)锌订。(重)
2竹握、一般不需要break。
3辆飘、如果使用多值啦辐,使用 ,
4、所有分支至少有一條指令蜈项。如果什么都不做昧甘,才直接使用break.

func demo(str: String) {
        switch str {
        case "10":
            print("A")
        case "9":
            print("B")
            //借助 , 執(zhí)行多個分支
        case "8","7":
            print("C")
        case "6":
            //什么都不做,使用break
            break
        default:
            print("D")
        }
    }

注意:每一個case后面必須有可執(zhí)行的語句

什么都不寫的話战得,會報這個錯誤


截屏2021-01-11 上午10.08.07.png

case 后面可以填寫一個范圍匹配

let score = 95
switch socre {
    case 90...100:
        println("A")
    case 60...89:
        println("B")
    default:
        println(C)

switch 要保證處理所有可能的情況 不然編譯器會報錯
因此 這里的default一定要加 不然會出現(xiàn)一些處理不到的情況

Value Binding
針對元組,Switch還支持類似于Optional Binding的Value Binding庸推,就是能把元組中的各個值提取出來常侦,然后直接在下面使用:

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

這樣也是可以的:

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

case 還可以匹配元組
這是與OC 一個不一樣的地方 方便使用

let point = (1,1)
switch point{
    case (0,0):
        println("這個點在原點上")
    case (_,0):
        println("這個點在x軸上")
    case (0,_):
        println("這個點在y軸上")
    case (-2...2,-2...2)
        println("這個點在矩形框內")

case 的數(shù)值綁定
在case匹配的同時 可以講switch中的值綁定給一個特定的變量或者常量
以便在case后面的語句中使用

let point = (10,0)
switch point{
    
    case (let x,0):
        println("這個點在x軸上贬媒,x值是\(x)")'
    case (0,let y):
        println("這個點在y軸上聋亡,y的值是\(y)")
    case let (x,y):
        printf("這個點的x值是\(x),y值是\(y)")
} 

//打印:這個點在x 軸上 x 值是(y)
注意觀察 這里是沒有default 的 所有default不是必須的
但是case 必須處理所有的情況

where 這個語法是特別好用的 比以前的判斷簡單多了
switch 語句可以使用where 來增加判斷條件
//比如判斷一個點是否在一條線上

var point = (10,-10)
switch point{
        case let (x,y) where x == y:
            println("這個點在綠色的線上")
        case let (x,y) where x == -y:
            println("這個點在紫線上")
        default :
            printf("這個點不在這兩條線上")
}

fallthrough 的用法
執(zhí)行完當前的case后 會執(zhí)行fallthrogh 后面的的case
或者default

let num = 20
var str = "\(num)是個"
switch num{
    case 0...50:
        str += "0~50之間的"
        fallthrough
    default:
        str += "整數(shù)"
}
println(str)

//打印 : 20 是個0~50之間的整數(shù)
注意:fallthrough后面的case條件不能定義變量和常量

把let放在外面和放在里面為每一個元素單獨寫上let是等價的际乘。
當你在一個case里使用Value Binding的時候坡倔,如果你同時也在它的上一個case里使用了fallthrough,這是編譯器所不允許的,你可能會收到這樣一個編譯錯誤:

image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末罪塔,一起剝皮案震驚了整個濱河市投蝉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌征堪,老刑警劉巖瘩缆,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佃蚜,居然都是意外死亡庸娱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門谐算,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熟尉,“玉大人,你說我怎么就攤上這事洲脂〗锒” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵腮考,是天一觀的道長雇毫。 經(jīng)常有香客問我,道長踩蔚,這世上最難降的妖魔是什么棚放? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮馅闽,結果婚禮上飘蚯,老公的妹妹穿的比我還像新娘。我一直安慰自己福也,他們只是感情好局骤,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暴凑,像睡著了一般峦甩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上现喳,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天凯傲,我揣著相機與錄音,去河邊找鬼嗦篱。 笑死冰单,一個胖子當著我的面吹牛,可吹牛的內容都是我干的灸促。 我是一名探鬼主播诫欠,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼涵卵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荒叼?” 一聲冷哼從身側響起轿偎,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甩挫,沒想到半個月后贴硫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡伊者,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年英遭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亦渗。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡挖诸,死狀恐怖,靈堂內的尸體忽然破棺而出法精,到底是詐尸還是另有隱情多律,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布搂蜓,位于F島的核電站狼荞,受9級特大地震影響,放射性物質發(fā)生泄漏帮碰。R本人自食惡果不足惜相味,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殉挽。 院中可真熱鬧丰涉,春花似錦、人聲如沸斯碌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傻唾。三九已至投慈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冠骄,已是汗流浹背伪煤。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猴抹,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓锁荔,卻偏偏與公主長得像蟀给,于是被迫代替她去往敵國和親蝙砌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容