Swift 3.0學(xué)習(xí)筆記_9_控制轉(zhuǎn)移語(yǔ)句

continue, break, fallthrough, guard, 檢測(cè) API 可用性

//控制轉(zhuǎn)移語(yǔ)句
//Swift 包含 5種控制轉(zhuǎn)移語(yǔ)句: continue,break,fallthrough,return,throw

//1.continue
//continue 語(yǔ)句的作用是終止本次循環(huán),進(jìn)入下一次循環(huán).
//栗子:剔除元音字母和空格
let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput.characters {
    switch character {
    case "a","e","i","o","u"," ":
        continue
    default:
        puzzleOutput.append(character)
    }
}

//2.break
//break 語(yǔ)句會(huì)立刻結(jié)束整個(gè)控制流的執(zhí)行.

//3.fallthrough
//在 C 語(yǔ)言的 switch 語(yǔ)句中,需要在每個(gè) case 語(yǔ)句內(nèi)插入 break 語(yǔ)句,以阻止自動(dòng)進(jìn)入下一個(gè) case 分支內(nèi). Swift 內(nèi)的 switch 語(yǔ)句在匹配到正確的 case 后,會(huì)自動(dòng)結(jié)束整個(gè) switch 語(yǔ)句的執(zhí)行,避免了自動(dòng)進(jìn)入下一個(gè) case 語(yǔ)句,所以無(wú)需插入 break 語(yǔ)句.但如果需要在 Switft 語(yǔ)言內(nèi)保持 C 語(yǔ)言風(fēng)格的貫穿的特性, 可以在每個(gè)需要該特性的 case 分支內(nèi)使用 fallthrough 關(guān)鍵字.
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}
print(description)
//注:fallthrough 關(guān)鍵字不會(huì)檢查它下一個(gè)將會(huì)落入執(zhí)行的 case 中的匹配條件, fallthrough 簡(jiǎn)單地使用代碼繼續(xù)連接到下一個(gè) case 中的代碼,這和 C 語(yǔ)言標(biāo)準(zhǔn)中的 switch 語(yǔ)句特性是一樣的.


//4.提前退出 guard
//guard 的執(zhí)行取決于一個(gè)表達(dá)式的布爾值,我們可以使用 guard 語(yǔ)句來(lái)要求條件必須為真時(shí),以執(zhí)行 guard 語(yǔ)句后的代碼.不同于 if 語(yǔ)句,一個(gè) guard 語(yǔ)句總是有一個(gè) else 從句,如果條件不為真則執(zhí)行 else 從句中的代碼.

// 如果 guard 語(yǔ)句的條件被滿足,則執(zhí)行 guard 語(yǔ)句大括號(hào)后面的代碼.將常量或者變量的可選綁定作為 guard 語(yǔ)句的條件,都可以保護(hù) guard 語(yǔ)句后面的代碼.
//如果條件不滿足,在 else 分支上的代碼就會(huì)被執(zhí)行,這個(gè)分支必須轉(zhuǎn)移控制以退出 guard 語(yǔ)句出現(xiàn)的代碼段.可以使用控制轉(zhuǎn)移語(yǔ)句做這件事,或者調(diào)用一個(gè)不返回的方法或函數(shù),例如: fatalError().
func greet(person:[String:String]) {
    guard let name = person["name"] else {
        return
    }
    print("Hello \(name)")
    
    guard let location = person["location"] else {
        print("I hope the weather is nice near you.")
        return
    }
    print("I hope the weather is nice in \(location).")
}
greet(person: ["name":"John"])

//相比于 if 語(yǔ)句, guard 語(yǔ)句可以提升代碼的可讀性,它可以使代碼連貫的被執(zhí)行而不需要將它包在 else 塊中.


//5.檢測(cè) API 可用性
//我們可在 if 或 guard 語(yǔ)句中使用 可用性條件(availability condition)去有條件的執(zhí)行一段代碼,來(lái)在運(yùn)行時(shí)判斷調(diào)用的 API 是否可用.編譯器使用從可用性條件語(yǔ)句中獲取的信息去驗(yàn)證,在這個(gè)代碼塊中調(diào)用的 API 是否可用.
if #available(iOS 10, macOS 10.12, *) {
    // 在 iOS 使用 iOS 10 的 API, 在 macOS 使用 macOS 10.12 的 API
    // 最后一個(gè)參數(shù) * 是必需的,用于指定在所有其他平臺(tái)中,如果版本號(hào)高于你的設(shè)備指定的最低版本, if 語(yǔ)句的代碼塊將會(huì)運(yùn)行.
} else {
    // 使用先前版本的 iOS 和 macOS 的 API
}

/**
 if #available(platform name version, ..., *) {
    APIs 可用,語(yǔ)句將執(zhí)行
 } else {
    APIs 不可用,語(yǔ)句將不執(zhí)行
 }
 */

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 控制流 for循環(huán) for-in for while循環(huán) while repeat-while 條件語(yǔ)句 if s...
    zhenyu54閱讀 945評(píng)論 0 0
  • Swift 提供了類似 C 語(yǔ)言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的for和while循環(huán),基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 777評(píng)論 1 1
  • Swift提供了多種控制流聲明。包括while循環(huán)來(lái)多次執(zhí)行一個(gè)任務(wù);if,guard和switch聲明來(lái)根據(jù)確定...
    BoomLee閱讀 2,070評(píng)論 0 3
  • 本章將會(huì)介紹 控制流For-In 循環(huán)While 循環(huán)If 條件語(yǔ)句Switch 語(yǔ)句控制轉(zhuǎn)移語(yǔ)句 continu...
    寒橋閱讀 802評(píng)論 0 0
  • 世界這么大,我想去看看。每次背上行囊,都覺得壓抑自己的洪荒之力得到了釋放。 享受在路上的感覺,沒有目的,隨心所欲。...
    李蝌蝌閱讀 348評(píng)論 0 2

友情鏈接更多精彩內(nèi)容