初探swift语言的学习笔记三(闭包-匿名函数)

作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/29353019
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998支持我,谢谢!


很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或block了,而叫闭包(closure)。下面配合代码来理解一下swift的闭包强大之处。使用系统的一个sort排序方法来演示一下闭包的使用,引用官网的事例

  1. //闭包(即匿名函数或OC中的block块函)
  2. letnames=["Chris","Alex","Ewa","Barry","Daniella"]
  3. //输出升序排序
  4. println(sort(names))
  5. funcbackwards(s1:String,s2:String)->Bool{
  6. returns1>s2
  7. }
  8. //使用自定义函数进行排序
  9. varreversed=sort(names,backwards)
  10. println(reversed)
  11. //使用闭包({(s1:String,s2:String)->Boolinreturns1>s2})函数进行排序
  12. vardesc=sort(names,{(s1:String,s2:String)->Boolinreturns1>s2})
  13. println(desc)
  14. //因为可以从names中推断出元素类型为String因此闭包可以直接省去->Bool
  15. vardes=sort(names,{s1,s2in println(des)
  16. //此外,swift中还可以从闭包中S1>S2,只有单的一表达式,可推断了结果是BOOL值
  17. //在这种没有歧义的情况下,可以省去return
  18. des=sort(names,s2ins1>s2})
  19. //还可以使用速记参数名
  20. //还可以直接使用运算符来排序
  21. println(des)

输出

    [Alex,Barry,Chris,Daniella,Ewa]
  1. [Ewa,Alex]
  2. [Ewa,Alex]
  3. [Alex,Ewa]
  4. 通过这些例子,可以看到swift的强大的编译及对代码的理解,只要代码足够清晰,没有歧义,就可以最大限度的省写一些代码,这样虽然减少了开发者的编码,同时代码的灵活情写法也有了大幅的提升,一定的范围内,对初学者的适应能力加大了。要写出更省更优的代码质量,我想是必要把各种可能认知到一个很高的深度。其实我很好期像

    funcbackwards(s1:String,s2:String)->Bool{
  1. returns1>s2
  2. }
  3. //使用自定义函数进行排序
  4. varreversed=sort(names,backwards)

    des=sort(names,>)
  1. println(des)

这两个是实现同一功能,但代码的编写量却相差较大,这是其一,其二,我想信这两个在编译时,计算机对代码的理解时间上也不一样,对于第一种比较清楚,计算机可能很快就认知,少了很多检查编译和验证,第二种,可能计算机要花少少时间来从names中推断各种可能后最终得到一个没有歧义的结果后才继续编译,其三,这两个在运行其运行效率是一样的吗?其四,读者的阅读上带来了一定的难度。就像光看一个>号,可能一下还不知道这是干嘛用的。但如果第一种情况就很好的知道是想干什么。

总而言之,swift的闭包有优也有略,大家在编码中就取其之长避其之短吧。当然什么是长,什么是短,读者自己定义了。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...