swift学习日志—— if let 与 guard 语法糖
2016-06-02 15:04
429 查看
工作比较忙,加上swift3.0也快出来了,听说核心代码又改变了(妈蛋,又得改代码了),swift的学习放了好久,有些都快忘了,赶紧复习下。
好,进入正题。
话说if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。
------------------------------------
if let
Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了if let, 可以改写成
上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。
------------------------------------
guard
假如if中出现的代码很长,我们写代码时可以将错误情况先返回。比如:
这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:
上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。
------------------------------------
至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算 && 和 ||。SQL中的条件语法也是用where这个关键字。
假如还不理解,动手将一段代码,不用if let 和 guard 进行改写。试多几次,就会发觉很自然了。
好,进入正题。
话说if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。
------------------------------------
if let
func doSomething(str: String?) { let v: String! = str if v != nil { // use v to do something } }
Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了if let, 可以改写成
func doSomething(str: String?) { if let v = str { // use v to do something } }
上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。
------------------------------------
guard
假如if中出现的代码很长,我们写代码时可以将错误情况先返回。比如:
func doSomething(str: String?) { let v: String! = str if v == nil { return } // use v to do something }
这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:
func doSomething(str: String?) { guard let v = str else { return } // use v to do something }
上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。
------------------------------------
至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算 && 和 ||。SQL中的条件语法也是用where这个关键字。
假如还不理解,动手将一段代码,不用if let 和 guard 进行改写。试多几次,就会发觉很自然了。
相关文章推荐
- swift学习笔记-UI篇之UIImageView
- swift学习之路(八)元组
- [swift学习之十五]指针练习
- swift2.0 学习笔记Thirteen
- 学习iOS swift问题记录
- swift 字符串创建类
- 【swift基础】08在swift如何使用闭包、懒加载、和自定义类
- 【swift基础】07函数
- 【swift基础】06字典
- 【swift基础】05数组
- 【swift基础】04字符串
- 【Swift基础】02逻辑分支
- 【Swift基础】01常量&变量
- iOS中通过字符串创建类(Swift)
- cell侧滑显示多个按钮(Swift)
- Swift中代理的定义使用
- swift学习之路(七)可选
- iOS开发中的视图和各种基础控件----Swift
- Swift开篇010->下标
- Swift之Umbrella header .h not found