博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift Guard 守护
阅读量:4954 次
发布时间:2019-06-12

本文共 1919 字,大约阅读时间需要 6 分钟。

前言

  • guard 语句和 if 语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。

    • guard 语句只会有一个代码块,不像 if 语句可以 if else 多个代码块。
    • guard 必须强制有 else 语句。
    • guard 中的 else 只能执行转换语句,像 return, break, continue 或者 throws,当然你也可以在这里返回一个函数或者方法。
  • guard 语句的作用顾名思义就是守护。guard 语句判断其后的表达式布尔值为 false 时,才会执行之后代码块里的代码,如果为 true,则跳过整个 guard 语句。

1、guard 语句示例

  • 1)我们以高考为例,在进入考场时一般都会检查身份证和准考证,我们写这样一个方法。

    func checkup(person: [String: String]) {    // 检查身份证,如果身份证没带,则不能进入考场    guard let id = person["id"] else {        print("没有身份证,不能进入考场!")        return    }    // 检查准考证,如果准考证没带,则不能进入考场    guard let examNumber = person["examNumber"] else {        print("没有准考证,不能进入考场!")        return    }    // 身份证和准考证齐全,方可进入考场    print("您的身份证号为:\(id),准考证号为:\(examNumber)。请进入考场!")}
    checkup(person: ["id": "123456"])                              // 没有准考证,不能进入考场!checkup(person: ["examNumber": "654321"])                      // 没有身份证,不能进入考场!checkup(person: ["id": "123456", "examNumber": "654321"])      // 您的身份证号为:123456,准考证号为:654321。请进入考场!
    • 上述代码中的第一个 guard 语句用于检查身份证,如果检查到身份证没带,也就是表达式为 nil 时,执行大括号里的代码,并返回。第二个 guard 语句则检查准考证,如果两证齐全,则执行最后一个打印语句,上面的两个 guard 语句大括号内的代码都不会执行,因为他们表达式的布尔值都是非 nil

    • 这里值得注意的是,idexamNumber 可以在 guard 语句之外使用,也就是说当 guard 对其表达式进行验证后,idexamNumber 可在整个方法的作用域中使用,并且是解包后的。

  • 2)我们再用 if else 语句写一个类似的方法。

    func checkup(person: [String: String]) {    if let id = person["id"], let examNumber = person["examNumber"] {        print("您的身份证号为:\(id),准考证号为:\(examNumber)。请进入考场!")    } else {        print("证件不齐全,不能进入考场!")    }    //print("您的身份证号为:\(id),准考证号为:\(examNumber)")      // 报异常}
    checkup(person: ["id": "123456"])                              // 证件不齐全,不能进入考场!checkup(person: ["examNumber": "654321"])                      // 证件不齐全,不能进入考场!checkup(person: ["id": "123456", "examNumber": "654321"])      // 您的身份证号为:123456,准考证号为:654321。请进入考场!
    • 可以看到用 if else 实现的方法显然不如 guard 实现的那么精准,而且 idexamNumber 的作用域只限在 if 的第一个大括号内,超出这个作用域编译就会报错。

转载于:https://www.cnblogs.com/QianChia/p/8671111.html

你可能感兴趣的文章
玩玩小爬虫——抓取时的几个小细节
查看>>
error C4996: 'fopen'
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
bash 学习笔记3
查看>>
青岛Uber优步司机奖励政策(12月28日到1月3日)
查看>>
js时间加减
查看>>
夏天能让"蚊子"、蟑螂绝子绝孙的秘诀。
查看>>
Java for LeetCode 132 Palindrome Partitioning II
查看>>
Java review-basic1
查看>>