当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Swift 2.0 带来了令人激动的guard语句。但很多人还是不太理解guard的意义,特别是和 Swift 2.0 之前的简单if语句相比较。为什么guard就是比if要好呢?与if语句相同的是,gua

Swift 2.0 带来了令人激动的guard语句。但很多人还是不太理解guard的意义,特别是和 Swift 2.0 之前的简单if语句相比较。

为什么guard就是比if要好呢?

与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。

具体细节

让我们用一个简单的对比来比较一下现在的写法和用全新guard语句的写法:

func fooManualCheck(x: Int?) {

if x == nil || x <= 0 {

// 不符合值的要求时,写点代码

return

}

// 使用x

x!.description

}

这是最基本的Objective-C方式来保证一个变量真的存在并符合一个条件。没什么大问题,但是有一些缺点:

你是在检查一个不符合你期望的条件,而非检查你想要的值。如果你加了一堆像这样的条件判断,代码就变的不好理解。你在这里其实是等着你的条件通不过。

如果前面条件判断的结果不符合了,你还得将你的变量强制拆包。

Swift通过可选绑定让问题变得简单了一些,并解决了上面的部分缺点:

func fooBinding(x: Int?) {

if let x = x where x > 0 {

// 使用x

x.description

}

// 如果值不符合条件判断,就执行下面的代码

}

这个函数没有了第一个函数的2个缺陷,但引入了一个新的。你把你要写的代码都放在了所有条件判断中,而不是之后。你可能不会马上意识到这个问题,但是你可以想象在你的代码被执行之前,如果嵌套了好多需要被匹配的条件判断,这会变的多难读懂。

对此的解决方法是先对每个条件逐一做检查,如果不符合条件判断就退出。这就会让人容易看出来什么条件会让这个函数退出。

我听说过这个叫保镖模式(Bouncer Pattern),这个模式十分的合理。你要在坏情况进门之前把它们挡出去。这让你每次只考虑一种情况,而不用去搞清楚如何同时将所有的条件判断安排在一起。

这就是guard语句:

func fooGuard(x: Int?) {

guard let x = x where x > 0 else {

// 变量不符合条件判断时,执行下面代码

return

}

// 使用x

x.description

}

使用guard语句将上述的3个问题一并解决:

是对你所期望的条件做检查,而非不符合你期望的。又是和assert很相似。如果条件不符合,guard的else语句就运行,从而退出这个函数。

如果通过了条件判断,可选类型的变量在guard语句被调用的范围内会被自动的拆包 - 这个例子中该范围是fooGuard函数内部。这是一个很重要,却有点奇怪的特性,但让guard语句十分实用。

对你所不期望的情况早做检查,使得你写的函数更易读,更易维护。

对非可选类型的变量这种用法也是奏效的:

func fooNonOptionalGood(x: Int) {

guard x > 0 else {

// 变量不符合条件判断时,执行下面代码

return

}

// 使用x

}

func fooNonOptionalBad(x: Int) {

if x <= 0 {

// 变量不符合条件判断时,执行下面代码

return

}

// 使用x

}

再给一个示例对比,使用guard和if

 

 

总结

希望上面这个简单的例子告诉你可以马上在你的swift代码中使用guard,从而让你的函数/方法更清楚。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

罗德与施瓦茨与SmartViser携手开发了一种用于测试符合欧盟销售的智能手机和平板电脑的新Energy Efficiency Index(EEI)标签法规的解决方案。该解决方案的核心是R&S CMX500,这是...

关键字: 智能手机 Android iOS

(全球TMT2023年8月23日讯)全球营销衡量与体验管理平台AppsFlyer近日发布《2023电商App营销现状报告》。全球电商App显示出了较为强劲的韧性,并展现了较多的积极趋势与亮点。 报告最新的...

关键字: APP iOS 安卓 PI

报告显示:全球电商 App 获客花费接近50亿美元 北京2023年8月23日 /美通社/ -- 全球营销衡量与体验管理平台 AppsFlyer 近日发布《2023 电商 App 营销现状报告》。尽管面临全球经...

关键字: APPS BSP iOS Android

尽管安装增长放缓,全球游戏 App 获客花费仍高达 267 亿美元 经济低迷导致 2023 游戏 App 营销优先考虑收入指标,用户增长次之 北京2023年3月9日 /美通社/ -- 今天,全球营销衡量与体验管理平台...

关键字: APPS iOS Android BSP

10美元以上符合条件的交易仅需2.99美元运费 北京2023年2月2日 /美通社/ -- 全球移动跨境电商平台Wish的母公司ContextLogic Inc.今日宣布,其正分阶段推出2.99美元固定运费服务。该服务适...

关键字: APP 移动 EXPRESS iOS

苹果承认,当设备打开时,iPhone 14 ProMax用户可能会在显示屏上看到闪烁的水平线。

关键字: iOS 苹果 iPhone 14 Pro

谷歌的Android和苹果iPhone运行的iOS是市场上最受欢迎的两种智能手机操作系统。两者都有自己独特的特点和能力,对许多人来说,在两者之间做出选择可能是一个艰难的决定。

关键字: 苹果 谷歌 iOS

如果您今天要购买一部新智能手机,它运行两种操作系统之一的可能性非常大:Google 的 Android 或 Apple 的 iOS。

关键字: Android iOS 谷歌

据业内信息,苹果官方表示将于下周面向 iPhone 用户发布iOS 16.3系统正式版,本次新版本将带来一些新功能以及部分增强功能。预计除了iOS 16.3外苹果将一同发布 iPadOS 16.3、WatchOS 9.3...

关键字: 苹果 iOS 16.3 iOS

之前有调查机构称,其实苹果通过iPhone等iOS设备一直在跟踪你的隐私数据,换句话说就是,他们明面上说的保护用户隐私,但私下一直都没停止。

关键字: iPhone 14 苹果 iOS
关闭
关闭