continue, break, fallthrough, guard, 檢測 API 可用性
//控制轉(zhuǎn)移語句
//Swift 包含 5種控制轉(zhuǎn)移語句: continue,break,fallthrough,return,throw
//1.continue
//continue 語句的作用是終止本次循環(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 語句會立刻結(jié)束整個控制流的執(zhí)行.
//3.fallthrough
//在 C 語言的 switch 語句中,需要在每個 case 語句內(nèi)插入 break 語句,以阻止自動進(jìn)入下一個 case 分支內(nèi). Swift 內(nèi)的 switch 語句在匹配到正確的 case 后,會自動結(jié)束整個 switch 語句的執(zhí)行,避免了自動進(jìn)入下一個 case 語句,所以無需插入 break 語句.但如果需要在 Switft 語言內(nèi)保持 C 語言風(fēng)格的貫穿的特性, 可以在每個需要該特性的 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)鍵字不會檢查它下一個將會落入執(zhí)行的 case 中的匹配條件, fallthrough 簡單地使用代碼繼續(xù)連接到下一個 case 中的代碼,這和 C 語言標(biāo)準(zhǔn)中的 switch 語句特性是一樣的.
//4.提前退出 guard
//guard 的執(zhí)行取決于一個表達(dá)式的布爾值,我們可以使用 guard 語句來要求條件必須為真時,以執(zhí)行 guard 語句后的代碼.不同于 if 語句,一個 guard 語句總是有一個 else 從句,如果條件不為真則執(zhí)行 else 從句中的代碼.
// 如果 guard 語句的條件被滿足,則執(zhí)行 guard 語句大括號后面的代碼.將常量或者變量的可選綁定作為 guard 語句的條件,都可以保護(hù) guard 語句后面的代碼.
//如果條件不滿足,在 else 分支上的代碼就會被執(zhí)行,這個分支必須轉(zhuǎn)移控制以退出 guard 語句出現(xiàn)的代碼段.可以使用控制轉(zhuǎn)移語句做這件事,或者調(diào)用一個不返回的方法或函數(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 語句, guard 語句可以提升代碼的可讀性,它可以使代碼連貫的被執(zhí)行而不需要將它包在 else 塊中.
//5.檢測 API 可用性
//我們可在 if 或 guard 語句中使用 可用性條件(availability condition)去有條件的執(zhí)行一段代碼,來在運(yùn)行時判斷調(diào)用的 API 是否可用.編譯器使用從可用性條件語句中獲取的信息去驗(yàn)證,在這個代碼塊中調(diào)用的 API 是否可用.
if #available(iOS 10, macOS 10.12, *) {
// 在 iOS 使用 iOS 10 的 API, 在 macOS 使用 macOS 10.12 的 API
// 最后一個參數(shù) * 是必需的,用于指定在所有其他平臺中,如果版本號高于你的設(shè)備指定的最低版本, if 語句的代碼塊將會運(yùn)行.
} else {
// 使用先前版本的 iOS 和 macOS 的 API
}
/**
if #available(platform name version, ..., *) {
APIs 可用踩娘,語句將執(zhí)行
} else {
APIs 不可用窃诉,語句將不執(zhí)行
}
*/