guard语句(如if语句)根据表达式的布尔值执行语句。 您使用保护语句要求条件必须为真,以便在执行保护语句后的代码。 与if语句不同,guard语句总是有一个else子句,如果条件不为真,则执行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."
如果保护语句的条件满足,代码执行在保护语句的结束大括号后继续。 使用可选绑定作为条件的一部分分配值的任何变量或常量都可用于guard语句出现的其余代码块。
如果不满足该条件,则执行else分支中的代码。 该分支必须转移控制以退出保护语句出现的代码块。 它可以使用控制转移语句,如return,break,continue或throw,或者它可以调用不返回的函数或方法,如fatalError(_:file:line :)。
与使用if语句进行相同的检查相比,对需求使用guard语句可提高代码的可读性。 它允许您编写通常执行的代码,而不会将其包装在else块中,并且它允许您保存处理需求后返回的值。
检测ApI的可用性
您可以在if或guard语句中使用可用性条件来有条件地执行代码块,具体取决于您要使用的API是否在运行时可用。 当编译器验证该代码块中的API可用时,将使用来自可用性条件的信息。
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及更高版本上执行; 在macOS上,只在macOS 10.12和更高版本。 最后一个参数*是必需的,并且指定在任何其他平台上,if的主体在目标指定的最小部署目标上执行。
在其一般形式中,可用性条件采用平台名称和版本的列表。 您可以使用平台名称,例如iOS,macOS,watchOS和tvOS--查看完整列表,请参阅声明属性。 除了指定主要版本号,如iOS 8,您可以指定次要版本号,如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
}
网友评论