简明扼要的闭包表达式

其实Swift已经为我们提供了很多简化的语法,可以让我们保证代码的高可读性和维护性。还用上面的例子来说明,对于  greetPeople 这个全局函数来说,其实只需要使用一次,所以我们没必要单独定义这个函数。我们可以直接使用闭包表达式来处理:

let fullGreetings = guestList.map({(person: String) -> String in return "Hello, \(person)!"})

闭包表达式其实是函数的字面值,官方一般称之为匿名函数。一般当我们需要使用函数快速的实现一个简短的处理逻辑并且只使用一次的时候,我们可以省去函数名,使用简化的语法。上面的代码中可以看到关键字  in 之前是闭包表达式的参数和返回值,  in 之后是闭包表达式实际处理逻辑的代码区域。

下面我们将使用Swift更多的特性来进一步简化闭包表达式。

我们知道Swift中有类型推断的特性,所以我们可以取掉参数类型:

let fullGreetings = guestList.map({(person) -> String in return "Hello, \(person)!" })

像我们示例中的这种单一闭包表达式,编译器可以根据  in 之前的返回值类型和  return 之后的返回数据类型自动判断,所以我们可以省略返回值和  return 关键字:

let fullGreetings = guestList.map({person in "Hello, \(person)!" })

其实在Swift中还提供了参数的简写方式:  $0 代表第一个参数、  $1 代表第二个参数以此类推。所以我们又可以将参数名称省略:

let fullGreetings = guestList.map({ "Hello, \($0)!" })

当函数的最后一个参数是闭包时,可以将闭包写在  () 之外,这也是Swift的一个特性,所以我们还可以继续简化:

let fullGreetings = guestList.map(){ "Hello, \($0)!" }

当函数有且仅有一个参数,并该参数是闭包时,不但可以将闭包写在  () 外,还可以省略  () :

let fullGreetings = guestList.map{ "Hello, \($0)!" }

到目前为止,示例中的闭包表达式已经被我们根据Swift的特性,简化为简明扼要、高可读性的闭包表达式了!

最新文章

  1. pair correlation ggpair ggmatrix
  2. Redux教程3:添加倒计时
  3. 第5章 jQuery对表单、表格的操作及更多应用
  4. java 常见关键字的使用
  5. (转)深入浅出 iOS 之生命周期
  6. Jquery Mobile局部刷新后js和css失效,需局部渲染
  7. YII Framework学习教程-YII的安全
  8. hdu 5007 水 弦
  9. 触发器(基本的SR触发器、同步触发器、D触发器)
  10. maven lean install 的时候出错 Failed to clean project
  11. C++反汇编第二讲,不同作用域下的构造和析构的识别
  12. Java之List排序
  13. TCP浅谈为什么3次握手
  14. 关于PCB走线能不能走锐角的讨论
  15. request 模块详细介绍
  16. 团队作业——Alpha冲刺2/12
  17. signal()信号操作
  18. CS231n学习笔记-图像分类笔记(下篇)
  19. 带包的java类在cmd环境下的执行办法
  20. C语言的知识与能力予以自评

热门文章

  1. restframework中的那些参数你知道吗?
  2. 【Android】导航栏(加图片icon)和不同页面的实现(viewpager+tablayout)
  3. python爬xx图代码
  4. 青岛Uber优步司机奖励政策(12月28日到1月3日)
  5. 4946: [Noi2017]蔬菜
  6. jsp传递参数的四种方法
  7. SpringBoot入门(一)——开箱即用
  8. 11gR2RAC更换CRS磁盘组文档
  9. JAVA FILE.renameTo跨文件系统移动文件失败
  10. Selenium(Python) ddt读取CSV文件数据驱动