一、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)
- 推荐别名定义闭包,因为很容易、清楚的看出闭包的参数和返回值。
- 别纠结为什么用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)
- 用中括号表示的是一个捕获参数的列表,当闭包被声明的时候,参数列表也会创建一份拷贝。所以即使再次给food赋值的时候,已经不能改变闭包里面的参数了。
- 当闭包无参数,无返回值时,可以省略闭包中的
in
关键字。
- 用小括号表示的是定义闭包的传入参数,使用闭包的时候也需要带上参数。