- 闭包表达式是匿名函数
闭包表达式的类型和函数的类型一样, 是参数加上返回值, 也就是in之前的部分
以下为闭包表达式
in关键字的目的是便于区分返回值和执行语句
{
(参数) -> 返回值类型 in
执行语句
}
一般形式:{
(parameters) -> returnType in
statements
}
完整写法:
let say:(String) -> Void = {
(name: String) -> Void in
print("hello \(name)")
}
say("HaRi")
当然以上可省略say右边的闭包类型
let say = {
(name: String) -> Void in
print("hello \(name)")
}
say("HaRi")
有多个参数,且有返回值的写法
let calAdd:(Int,Int)->(Int) = {
(a:Int,b:Int) -> Int in
return a + b
}
print(calAdd(100,150))
Swift可以根据闭包上下文推断参数和返回值的类型,所以上面的例子可以简化如下
let calAdd2:(Int,Int)->(Int) = {
(a,b) in
return a + b
}
print(calAdd2(150,100))
以上当参数类型省略时,参数的括号也可一并省去,如:
let calAdd2:(Int,Int)->(Int) = {
a,b in
return a + b
}
单行表达式闭包可以隐式返回,如下,省略return
let calAdd3:(Int,Int)->(Int) = {(a,b) in a + b}
print(calAdd3(50,200))
如果闭包没有参数,可以直接省略“in”
let calAdd4:()->Int = {return 100 + 150}
print("\(calAdd4())")
如果闭包既没有参数也没返回值
,可以把return和in都省略
let calAdd5:()->Void = {print("我是250")}
calAdd5()
- 自动闭包:
- 自动创建的闭包,封装一堆表达式在自动闭包中。
- 自动闭包是
不接受任何参数
的,可以有返回值 - 当
只有一句表达式时
,可省略return,会自动返回表达式产生的值。 - 自动闭包让你能够延迟求值,直到调用这个闭包,闭包代码块才会被执行
var array = ["1","100","hi","hello"]
//自动闭包只有一句表达式时,既可以省略闭包类型:"(参数) -> 返回值类型 in",又可以省略return
let removeBlock = {array.remove(at: 3)}
/**它实际上等价于
let removeBlock = {
() -> Any in
return array.remove(at: 3)
}
*/
print(array.count) // 4
print("执行代码块移除\(removeBlock())")
print(array.count) // 3
网友评论