詳解Swift的switch...case語(yǔ)句中break關(guān)鍵字的用法
與Objective-C中這部分內(nèi)容相比,在Swift中switch得到了極大的改善。這是一件非常有趣的事,因?yàn)檫@還是沒有添加到Objective-C中,還是沒有打破Objective-C是C的超集的事實(shí)。
第一件令人興奮的地方是可以對(duì)字符串轉(zhuǎn)換。這也許正是你之前想要做,卻不能做的事。在Objective-C中如果要對(duì)字符串用“switch”,你必須要使用多個(gè)if語(yǔ)句,同時(shí)要用isEqualToString:,像下面這樣:
if ([person.name isEqualToString:@"Matt Galloway"]) {
NSLog(@"Author of an interesting Swift article");
} else if ([person.name isEqualToString:@"Ray Wenderlich"]) {
NSLog(@"Has a great website");
} else if ([person.name isEqualToString:@"Tim Cook"]) {
NSLog(@"CEO of Apple Inc.");
} else {
NSLog(@"Someone else);
}
這樣可閱讀性不強(qiáng),也要打很多字。同樣的功能在Swift中實(shí)現(xiàn)如下:
switch person.name {
case "Matt Galloway":
println("Author of an interesting Swift article")
case "Ray Wenderlich":
println("Has a great website")
case "Tim Cook":
println("CEO of Apple Inc.")
default:
println("Someone else")
}
除了對(duì)字符串可以使用switch之外,請(qǐng)注意這里一些有趣的事情。沒有看見break。因?yàn)樵趕witch中一個(gè)case語(yǔ)句執(zhí)行完成后就不再向下執(zhí)行。不會(huì)再偶然地出現(xiàn)bug!
再比如這樣的情況下
let vegetable = "red pepper"
switch vegetable{
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber","watercress":
let vegetableComment = "That would make a good tea sandwich."
//switch支持所有類型的數(shù)據(jù),以及多種比較運(yùn)算——沒有限制為必須是整數(shù),也沒有限制為必須測(cè)試相等(tests for equality 真的是這樣翻譯的嗎?)
case let x where x.hasSuffix("pepper"):
let vagetableComment = "Is it a spicy \(x)?"
//switch語(yǔ)句要求必須覆蓋所有的可能,否則報(bào)錯(cuò)'switch must be exhaustive, consider adding a default cla'
default:
print("不能沒有default")
}
不需要寫break,
執(zhí)行完匹配到的case后,程序會(huì)跳出switch,而不是繼續(xù)執(zhí)行下一個(gè)case,所以不需要在case的代碼后面添加break來(lái)跳出switch。
下面的switch語(yǔ)句可能會(huì)擾亂你的思路,所以準(zhǔn)備好了!
switch i {
case 0, 1, 2:
println("Small")
case 3...7:
println("Medium")
case 8..10:
println("Large")
case _ where i % 2 == 0:
println("Even")
case _ where i % 2 == 1:
println("Odd")
default:
break
}
首先,這出現(xiàn)了一個(gè)break。因?yàn)閟witch必須要全面而徹底,它們需要處理所有的情況。在這種情況下,我們想要default時(shí)不做任何事,所以放置了一個(gè)break來(lái)表明此處不應(yīng)該發(fā)生任何事。
接下來(lái)有趣的事情是你在上面看到的…和..,這些是新的操作符,用于來(lái)定義范圍。前者用來(lái)定義范圍包括右邊的數(shù)字,后者定義的范圍不包括右邊的數(shù)字。它們真是超乎想象地有用。
最后一件事是可以把case定義成對(duì)輸入值的計(jì)算。在上面這種情況下,如果這個(gè)值不匹配從0到10,如果是偶數(shù)打印“Even”,是奇數(shù)打印“Odd”。太神奇了!
相關(guān)文章
判斷?ScrollView List?是否正在滾動(dòng)詳解
這篇文章主要為大家介紹了判斷?ScrollView、List?是否正在滾動(dòng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
舉例講解Swift編程中switch...case語(yǔ)句的用法
這篇文章主要介紹了Swift編程中switch...case語(yǔ)句的用法,其中fallthrough關(guān)鍵字在switch語(yǔ)句中的使用是重點(diǎn),需要的朋友可以參考下2016-04-04
Swift中的類class與結(jié)構(gòu)體struct體學(xué)習(xí)筆記
和C++一樣,Swfit中同時(shí)擁有類與結(jié)構(gòu)體,能夠充分滿足開發(fā)者面向?qū)ο蠛兔嫦蜻^程編程的需求,這里我們就來(lái)看一下Swift中的類class與結(jié)構(gòu)體struct體學(xué)習(xí)筆記2016-07-07
SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹
這篇文章主要介紹了Swift中動(dòng)態(tài)調(diào)用實(shí)例方法介紹,在Swift中有一類很有意思的寫法,可以讓我們不直接使用實(shí)例來(lái)調(diào)用這個(gè)實(shí)例上的方法,而是通過類型取出這個(gè)類型的某個(gè)實(shí)例方法的簽名,然后再通過傳遞實(shí)例來(lái)拿到實(shí)際需要調(diào)用的方法,需要的朋友可以參考下2015-01-01
關(guān)于Swift 4.1中的Codable改進(jìn)詳解
這篇文章主要給大家介紹了關(guān)于Swift 4.1中的Codable改進(jìn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02
swift中自定義正則表達(dá)式運(yùn)算符=~詳解
這篇文章主要給大家介紹了關(guān)于swift中自定義正則表達(dá)式運(yùn)算符=~的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
詳解swift中xcworkspace多項(xiàng)目管理
給大家詳細(xì)講解了IOS開發(fā)中swift語(yǔ)言xcworkspace多項(xiàng)目管理的方法和介紹,一起參考一下。2017-11-11

