作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/29353019
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!
很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或block了,而叫闭包(closure)。下面配合代码来理解一下swift的闭包强大之处。使用系统的一个sort排序方法来演示一下闭包的使用,引用官网的事例
- //闭包(即匿名函数或OC中的block块函)
- letnames=["Chris","Alex","Ewa","Barry","Daniella"]
- //默认输出升序排序
- println(sort(names))
- funcbackwards(s1:String,s2:String)->Bool{
- returns1>s2
- }
- //使用自定义函数进行排序
- varreversed=sort(names,backwards)
- println(reversed)
- //使用闭包({(s1:String,s2:String)->Boolinreturns1>s2})函数进行排序
- vardesc=sort(names,{(s1:String,s2:String)->Boolinreturns1>s2})
- println(desc)
- //因为可以从names中推断出元素类型为String因此闭包可以直接省去->Bool
- vardes=sort(names,{s1,s2in println(des)
- //此外,swift中还可以从闭包中S1>S2,只有单的一表达式,可推断了结果是BOOL值
- //在这种没有歧义的情况下,可以省去return
- des=sort(names,s2ins1>s2})
- //还可以使用速记参数名
- //还可以直接使用运算符来排序
- println(des)
输出: