swift4 闭包Closure参数捕获表

2018-03-08  本文已影响69人  George2016

一、swift闭包的定义

//一般形式
let calAdd:(Int,Int)->(Int) = {
    (a:Int,b:Int) -> Int in
    return a + b
}
print(calAdd(100,150))

//别名形式
typealias Clousure = (Int, Int)->Int
let calAdd:Clousure = {
    (a,b) in
    return a+b
}
calAdd(100,200)
  1. 推荐别名定义闭包,因为很容易、清楚的看出闭包的参数和返回值。
  2. 别纠结为什么用in作为传入参数和包体的分隔符,总得区分一下啊。

二、闭包中的参数用中括号括起来表示什么意思

//案例一
var food = "apple"
let closure = {
    //这里也是我一直不明白为什么用中括号,而不是用小括号
    [food] in
    print("I like eat \(food)")
}
food = "orange"
closure()
//输出:I like eat apple
//案例二
var food = "apple"
let closure = {
    //这里注释掉
    //[food] in
    print("I like eat \(food)")
}
food = "orange"
closure()
//输出:I like eat orange
//案例三
var food = "apple"
let closure = {
    (food: String) in
    print("I like eat \(food)")
}
food = "orange"
closure(food)
  1. 用中括号表示的是一个捕获参数的列表,当闭包被声明的时候,参数列表也会创建一份拷贝。所以即使再次给food赋值的时候,已经不能改变闭包里面的参数了。
  2. 当闭包无参数,无返回值时,可以省略闭包中的in关键字。
  3. 用小括号表示的是定义闭包的传入参数,使用闭包的时候也需要带上参数。
上一篇 下一篇

猜你喜欢

热点阅读