guard語(yǔ)句(如if語(yǔ)句)根據(jù)表達(dá)式的布爾值執(zhí)行語(yǔ)句战得。 您使用保護(hù)語(yǔ)句要求條件必須為真喷斋,以便在執(zhí)行保護(hù)語(yǔ)句后的代碼。 與if語(yǔ)句不同茧彤,guard語(yǔ)句總是有一個(gè)else子句骡显,如果條件不為真,則執(zhí)行else子句中的代碼。
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"])
// Prints "Hello John!"
// Prints "I hope the weather is nice near you."
greet(person: ["name": "Jane", "location": "Cupertino"])
// Prints "Hello Jane!"
// Prints "I hope the weather is nice in Cupertino."
如果保護(hù)語(yǔ)句的條件滿足蟆盐,代碼執(zhí)行在保護(hù)語(yǔ)句的結(jié)束大括號(hào)后繼續(xù)承边。 使用可選綁定作為條件的一部分分配值的任何變量或常量都可用于guard語(yǔ)句出現(xiàn)的其余代碼塊。
如果不滿足該條件石挂,則執(zhí)行else分支中的代碼博助。 該分支必須轉(zhuǎn)移控制以退出保護(hù)語(yǔ)句出現(xiàn)的代碼塊。 它可以使用控制轉(zhuǎn)移語(yǔ)句痹愚,如return富岳,break,continue或throw拯腮,或者它可以調(diào)用不返回的函數(shù)或方法窖式,如fatalError(_:file:line :)。
與使用if語(yǔ)句進(jìn)行相同的檢查相比动壤,對(duì)需求使用guard語(yǔ)句可提高代碼的可讀性萝喘。 它允許您編寫通常執(zhí)行的代碼,而不會(huì)將其包裝在else塊中琼懊,并且它允許您保存處理需求后返回的值阁簸。
檢測(cè)ApI的可用性
您可以在if或guard語(yǔ)句中使用可用性條件來(lái)有條件地執(zhí)行代碼塊,具體取決于您要使用的API是否在運(yùn)行時(shí)可用哼丈。 當(dāng)編譯器驗(yàn)證該代碼塊中的API可用時(shí)启妹,將使用來(lái)自可用性條件的信息。
if #available(iOS 10, macOS 10.12, *) {
// Use iOS 10 APIs on iOS, and use macOS 10.12 APIs on macOS
} else {
// Fall back to earlier iOS and macOS APIs
}
上面的可用性條件指定在iOS上醉旦,if的主體僅在iOS 10及更高版本上執(zhí)行; 在macOS上饶米,只在macOS 10.12和更高版本。 最后一個(gè)參數(shù)*是必需的车胡,并且指定在任何其他平臺(tái)上檬输,if的主體在目標(biāo)指定的最小部署目標(biāo)上執(zhí)行。
在其一般形式中吨拍,可用性條件采用平臺(tái)名稱和版本的列表褪猛。 您可以使用平臺(tái)名稱,例如iOS羹饰,macOS,watchOS和tvOS--查看完整列表碳却,請(qǐng)參閱聲明屬性队秩。 除了指定主要版本號(hào),如iOS 8昼浦,您可以指定次要版本號(hào)馍资,如iOS 8.3和macOS 10.10.3。
if #available(platform name version, ..., *) {
statements to execute if the APIs are available
} else {
fallback statements to execute if the APIs are unavailable
}