What's New in Swift 2 —— guard关键词
来源:互联网 发布:usda数据使用指南 编辑:程序博客网 时间:2024/06/01 10:50
一、前言
本文主要介绍Swift 2新特性,里边的guard关键词。请看下面两个方法,一个good,一个bad。为什么用guard的那个方法就是good的呢?
// Goodfunc fooNonOptionalGood(x: Int) { guard x > 0 else { // x 不大于零 return } // x 大于零}// badfunc fooNonOptionalBad(x: Int) { if x <= 0 { // x 不大于零 return } // x 大于零}
二、解释
1、关键词“guard”是什么
// 如果不符合“x > 0”,即x <= 0,则执行花括号。guard x > 0 else { // some syntax return}
第一次看到guard的时候,就会让人觉得,“诶,为什么要用 guard,用 if 不是好了吗?因为 guard 和 if 功能差不多呀,改成“if x <= 0”不就可以了吗,干嘛大费周章弄一个guard?
2、深入发掘
看一个判断正数的例子:
func fooPositiveCheck(x: Int?) { // 不是正数 if x == nil || x <= 0 { print("不是正数") return } // 是正数 print("是正数") x!.description}
这是OC最基本的判断方法,看起来没什么问题,很不错的写法呀~
但是,有两个缺点:
1、我们是判断“正数”,但是上面的方法是在判断“不是正数”的情况下,返回。如果这样的语句多了的话,容易令人困惑,因为明明想判断正数,但非要反过来,判断不是正数,然后返回。
2、如果是正数,还要解包optional的值x。(x!)
Swift 早期已经提供了Optional Binding(绑定):
func fooBinding(x: Int?) { if let x = x where x > 0 { print("是正数") x.description } print("不是正数")}
上面的Swift方法就解决了之前OC那个方法的两个缺点,但同时产生了另一个新的缺点:
——把你想实现的代码写在了判断嵌套里面,而不是外边;如果这样的语句多了,容易令人产生困惑。
要解决新产生的缺点,那么来看看Swift 2 中的guard关键词,会有怎样的效果:
func fooGuard(x: Int?) { guard let x = x where x > 0 else { print("不是正数") return } print("是正数") // 自动解包(不用x!) x.description}
用 guard 解决了以上的三个缺点:
1、判断:你想要的,而不是:不想要的。[判断正数:想要的——正数(x>0);不想要的——非正数(x<=0)];
2、自动解包;
3、检查判断在前,使得你的方法更合理,也更容易地维护。
三、参考文章
ecerney:《Swift Guard Statement》
其他文章
Greg Heo:《What’s New in Swift 2》
jopen:《Swift 2 有哪些新特性[译]》
- What's New in Swift 2 —— guard关键词
- What’s New in Swift 2
- What's new in Swift 2.2
- What's new in Swift 3
- What’s New in Swift 3.1?
- What's New in Dxperience 8.1.2
- What's new in OpenSolaris200811
- What's "new" in JavaScript?
- What's new in HTML5?
- What's New in iOS
- what's new in vc2015
- What's new in iOS11?
- What's New in eXpressApp Framework 8.1.2
- What’s New in ASP.NET MVC 2
- What's new in windows server 2012 networking (Part 2)
- Swift 关键词guard(监视)
- What's New in ASP.NET 2.0?
- What's New in C# 2.0
- 快速排序
- Doctype的几种类型
- declare aa char(5) := 'b'; begin dbms_output.put_line(aa || '00'); end;
- 黑马程序员——java学习笔记--日期操作类
- LightOJ 1236 Pairs Forming LCM
- What's New in Swift 2 —— guard关键词
- android问题集锦之一
- 齐达迪的第一篇博客
- LeetCode(101)Symmetric Tree
- 黑马程序员——java学习笔记--泛型
- 取本地相册里面的照片并上传
- 《Mahout实战》
- JAVA基础--db10_java多态-内部类
- java学习笔记之反射