Swift-guard语句

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
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • guard 是 Swift 2 中我最喜爱的特性之一。虽然完全不使用 guard 也没有什么影响,它只是给我们提供...
    正直走阅读 2,743评论 0 1
  • 像if语句一样,guard的执行取决于一个表达式的布尔值。我们可以使用guard语句来要求条件必须为真时,以执行g...
    json_jie阅读 370评论 0 0
  • Swift提供了多种控制流声明。包括while循环来多次执行一个任务;if,guard和switch声明来根据确定...
    BoomLee阅读 2,005评论 0 3
  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 747评论 0 0
  • 《跃迁》 1、学会搜索知识、调用知识并为自己所用,远比单纯的记忆知识更重要,信息爆炸的时代,知识我们是永远也记不完...
    项七七阅读 128评论 0 0