• Swift-闭包理解(二)


    简明扼要的闭包表达式

    其实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的特性,简化为简明扼要、高可读性的闭包表达式了!

  • 相关阅读:
    centos 7.1开机/etc/rc.local脚本不执行的问题
    ssh免密码登录之ssh-keygen的用法
    Centos 7.x临时的网络与路由配置
    Centos 7.x系统安装后的初始化配置
    U盘安装Centos7.1操作系统的问题记录
    linux系统中关于shell变量$*与$@的区别
    linux服务器init 5启动图形界面,报错Retrigger failed udev events
    rpmdb: unable to join the environment的问题解决
    BFS 典型的迷宫问题
    JUnit的基本使用
  • 原文地址:https://www.cnblogs.com/WJJ-Dream/p/5806645.html
Copyright © 2020-2023  润新知