《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!
2015-10-14 11:03
375 查看
原创文章,欢迎转载。转载请注明:关东升的博客
我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式、函数参数和函数返回值,闭包表达式的运算结果是一种函数类型。Swift中的闭包类似于Objective-C中的代码块、Java中的匿名内部类。 使用闭包表达式Swift中的闭包表达式很灵活,其标准语法格式如下:{ (参数列表) ->返回值类型 in 语句组}其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字。Swift提供了多种闭包简化写法,我来介绍下面几种不同形式: 1、类型推断简化类型推断是Swift的强项,Swift可以根据上下文环境推断出参数类型和返回值类型。以下代码是标准形式的闭包:{(a:Int, b:Int) -> Intin return a + b}Swift能推断出参数a和b是Int类型,返回值也是Int类型。简化形式如下:{(a, b) in return a + b } {a, b in return a + b } //参数列表括号也可以省略 2、隐藏return关键字在闭包内部语句组只有一条语句,如return a + b等,那么这种语句都是返回语句。前面的关键字return可以省略,省略形式如下:{a, b in a + b }使用这种简化方式修改后的示例代码如下:
省略的前提是闭包中只有一条return语句。 3、省略参数名称Swift提供了参数名省略功能,我们可以用$0、$1、$2…来指定闭包中参数,$0指代第一个参数,$1指代第二个参数,$2指代第三个参数,以此类推$n+1指代第n个参数。使用参数名省略功能,在闭包中必须省略参数列表定义,Swift能够推断出这些缩写参数的类型。参数列表省略了,in关键字也需要省略。参数名省略之后如下所示:{$0 + $1}使用参数名省略后的示例代码如下:
4、使用闭包返回值闭包表达本质上是函数类型,是有返回值的,我们可以直接在表达式中使用闭包的返回值。重新修改add和sub闭包,示例代码如下:
解释:给c1赋值,后面是一个闭包表达式。但是闭包表达式不能直接赋值给c1,因为c1是Int类型,需要闭包的返回值。这就需要在闭包结尾的大括号后面接一对小括号(10,5),通过小括号(10,5)为闭包传递参数。 欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php
我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式、函数参数和函数返回值,闭包表达式的运算结果是一种函数类型。Swift中的闭包类似于Objective-C中的代码块、Java中的匿名内部类。 使用闭包表达式Swift中的闭包表达式很灵活,其标准语法格式如下:{ (参数列表) ->返回值类型 in 语句组}其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字。Swift提供了多种闭包简化写法,我来介绍下面几种不同形式: 1、类型推断简化类型推断是Swift的强项,Swift可以根据上下文环境推断出参数类型和返回值类型。以下代码是标准形式的闭包:{(a:Int, b:Int) -> Intin return a + b}Swift能推断出参数a和b是Int类型,返回值也是Int类型。简化形式如下:{(a, b) in return a + b } {a, b in return a + b } //参数列表括号也可以省略 2、隐藏return关键字在闭包内部语句组只有一条语句,如return a + b等,那么这种语句都是返回语句。前面的关键字return可以省略,省略形式如下:{a, b in a + b }使用这种简化方式修改后的示例代码如下:
func calculate(opr :String)-> (Int,Int)-> Int { var result : (Int,Int)-> Int switch (opr) { case "+" : result = {a, b in a + b } //return关键字省略了 default: result = {a, b in a - b } //return关键字省略了 } return result }
省略的前提是闭包中只有一条return语句。 3、省略参数名称Swift提供了参数名省略功能,我们可以用$0、$1、$2…来指定闭包中参数,$0指代第一个参数,$1指代第二个参数,$2指代第三个参数,以此类推$n+1指代第n个参数。使用参数名省略功能,在闭包中必须省略参数列表定义,Swift能够推断出这些缩写参数的类型。参数列表省略了,in关键字也需要省略。参数名省略之后如下所示:{$0 + $1}使用参数名省略后的示例代码如下:
func calculate(opr :String)-> (Int,Int)-> Int { var result : (Int,Int)-> Int switch (opr) { case "+" : result = {$0 + $1} //采用了参数名省略 default: result = {$0 - $1} //采用了参数名省略 } return result } let f1:(Int,Int)-> Int = calculate("+") print("10 + 5 = \(f1(10,5))") let f2:(Int,Int)-> Int = calculate("-") print("10 - 5 = \(f2(10,5))")
4、使用闭包返回值闭包表达本质上是函数类型,是有返回值的,我们可以直接在表达式中使用闭包的返回值。重新修改add和sub闭包,示例代码如下:
let c1:Int = {(a:Int, b:Int) -> Int in return a + b }(10,5) print("10 + 5 = \(c1)")
解释:给c1赋值,后面是一个闭包表达式。但是闭包表达式不能直接赋值给c1,因为c1是Int类型,需要闭包的返回值。这就需要在闭包结尾的大括号后面接一对小括号(10,5),通过小括号(10,5)为闭包传递参数。 欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- Apple Swift学习教程
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift中定义二维数组的方法及遍历方法示例
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- 简单分析Swift语言的一些基本特征
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- IOS 改变键盘颜色代码