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