博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - guard关键字(守护)
阅读量:7114 次
发布时间:2019-06-28

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

guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。但与if语句不同的是,guard语句只会有一个代码块,不像if语句可以if else多个代码块。

那么guard语句的作用到底是什么呢?顾名思义,就是守护。guard语句判断其后的表达式布尔值为false时,才会执行之后代码块里的代码,如果为true,则跳过整个guard语句,我们举例来看看。

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

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(["id": "123456"]) // 没有准考证,不能进入考场!checkup(["examNumber": "654321"]) // 没有身份证,不能进入考场!checkup(["id": "123456", "examNumber": "654321"]) // 您的身份证号为:123456,准考证号为:654321。请进入考场!

上述代码中的第一个guard语句用于检查身份证,如果检查到身份证没带,也就是表达式为false时,执行大括号里的代码,并返回。第二个guard语句则检查准考证。

如果两证齐全,则执行最后一个打印语句,上面的两个guard语句大括号内的代码都不会执行,因为他们表达式的布尔值都是true

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

我们再用if else语句写一个类似的方法:

func checkupUseIf(person: [String: String!]) {        if let id = person["id"], let examNumber = person["examNumber"] {        print("您的身份证号为:\(id),准考证号为:\(examNumber)。请进入考场!")    } else {        print("证件不齐全,不能进入考场!")    }        print("您的身份证号为:\(id),准考证号为:\(examNumber)")  // 报异常    }checkupUseIf(["id": "123456"]) // 证件不齐全,不能进入考场!checkupUseIf(["examNumber": "654321"]) // 证件不齐全,不能进入考场!checkupUseIf(["id": "123456", "examNumber": "654321"]) // 您的身份证号为:123456,准考证号为:654321。请进入考场!

我们可以看到用if else实现的方法显然不如guard实现的那么精准。而且idexamNumber的作用域只限在if的第一个大括号内,超出这个作用域编译就会报错。

转载地址:http://tighl.baihongyu.com/

你可能感兴趣的文章
关于URL编码
查看>>
深度学习的可解释性研究(一):让模型「说人话」
查看>>
QT5提示can not find -lGL的解决方法
查看>>
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月17日-9月23日)
查看>>
Tap-Ahead:让移动搜索更加便捷的解决之道
查看>>
Windows Server2016 Hyper-v Cluster部署
查看>>
juniper路由器配置
查看>>
jQuery一点一滴系列教程(第三点)
查看>>
ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
查看>>
系统数据权限的实现方案
查看>>
华为vlan划分,单臂路由以及静态路由
查看>>
UCD 2010百度工作坊
查看>>
ssh2免密码登录
查看>>
4_move_find_into_model
查看>>
MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
查看>>
windows server 2012 standard Evaluation 安装试用
查看>>
windows server 2008中配置TCP/IP
查看>>
网管必读:交换机技术简介及应用分析
查看>>
.NET多线程编程(9)——Thread类
查看>>
HP DL380G6上安装配置Vmware_ESXI4.1
查看>>