注册 登录
主题 : 来讨论讨论闭包
级别: 侠客

状态: 连续签到 - [32天]
UID: 266214
精华: 0
发帖: 171
可可豆: 318 CB
威望: 441 点
在线时间: 1050(时)
注册时间: 2013-10-17
最后登录: 2019-01-07
0 楼:  发表于: 2014-06-09 17:23    发自: Web Page

来讨论讨论闭包   

管理提醒: 本帖被 suannai0314 从 苹果开发者综合议事大厅 移动到本区(2014-06-09)
闭包
本质来说,函数是特殊的闭包,Swift中可以利用{}声明匿名闭包:

  1. numbers.map({
  2.     (number: Int) -> Int in
  3.     let result = 3 * number
  4.     return result
  5.     })

当闭包的类型已知时,可以使用下面的简化写法:

  1. numbers.map({ number in 3 * number })
此外还可以通过参数的位置来使用参数,当函数最后一个参数是闭包时,可以使用下面的语法:

  1. sort([1, 5, 3, 12, 2]) { $0 > $1 }


    不懂,谁能举个例子

清空我的评分动态本帖最近评分记录: 共1条评分记录
zenny_chen 可可豆 +10 2014-06-19 这是个好问题,确实需要做些讲解~
隐藏评分记录
级别: 侠客
UID: 322464
精华: 0
发帖: 79
可可豆: 192 CB
威望: 84 点
在线时间: 1816(时)
注册时间: 2014-06-06
最后登录: 2018-03-21
1 楼:  发表于: 2014-06-09 17:51    发自: Web Page
还可以写成 numbers.map{ number in 3 * number }
级别: 天使

状态: 连续签到 - [7天]
UID: 5513
精华: 19
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
注册时间: 2009-05-06
最后登录: 2016-08-30
2 楼:  发表于: 2014-06-18 14:37    发自: Web Page
引用
引用楼主oxidosnel于2014-06-09 17:23发表的 来讨论讨论闭包 :
sort([1, 5, 3, 12, 2]) { $0 > $1 }


这个是trailing closure。在Swift中,如果一个函数参数最后一个是函数类型,那么可以使用trailing closure的方式。
比如:


func myfunc(a:Int, closure: (Int)->Int) {
    println("The value is: \(a + closure(a))")
}

myfunc(10) {
    return $0 + 5
}



上述代码中,其实下面对myfunc的调用就跟myfunc(10, {(a: Int) -> Int in return a + 5})一样~
新浪围脖地址:http://t.sina.com.cn/1181389417
CPU Dasher for OS X: https://itunes.apple.com/cn/app/cpu-dasher/id1013487510?mt=12

级别: 侠客
UID: 5125
精华: 0
发帖: 20
可可豆: 1192 CB
威望: 1192 点
在线时间: 234(时)
注册时间: 2009-04-22
最后登录: 2014-10-30
3 楼:  发表于: 2014-06-18 16:18    发自: Web Page
LZ想讨论的是Swift中特殊的trailing closure的用法,并非普通的闭包
闭包是函数和环境的组合。
All for one, one for all.
级别: 天使

状态: 连续签到 - [7天]
UID: 5513
精华: 19
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
注册时间: 2009-05-06
最后登录: 2016-08-30
4 楼:  发表于: 2014-06-19 00:49    发自: Web Page
引用
引用第3楼joeway于2014-06-18 16:18发表的  :
LZ想讨论的是Swift中特殊的trailing closure的用法,并非普通的闭包
闭包是函数和环境的组合。


其实楼主是想讨论关于Swift中有关闭包的问题。前面一段列出了楼主自己的一些心得感悟。
后面一段则提出了自己的一些疑问。

楼主如果对Swift中的闭包还有啥疑惑,请参考此贴:
http://www.cocoachina.com/bbs/read.php?tid=204844
[ 此帖被zenny_chen在2014-06-19 01:10重新编辑 ]

新浪围脖地址:http://t.sina.com.cn/1181389417
CPU Dasher for OS X: https://itunes.apple.com/cn/app/cpu-dasher/id1013487510?mt=12

级别: 新手上路
UID: 227818
精华: 0
发帖: 19
可可豆: 111 CB
威望: 111 点
在线时间: 47(时)
注册时间: 2013-06-12
最后登录: 2016-09-14
5 楼:  发表于: 2014-06-24 16:59    发自: Web Page
后面那个是尾随写法(Trailing Closure)为了闭包中表达式比较多的情况下方便阅读而产生的

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部