swift从入门到精通07-闭包

324 阅读2分钟

1.闭包表达式

在swift中,我们可以通过func来定义一个函数,也可以用闭包表达式定义一个函数。

{
    (函数列表) -> 返回值类型 in
    函数体代码
}

例子:

var fn = {(v1: Int, v2: Int) -> Int in v1 + v2}

print(fn(2,3))

2.闭包表达式简写

例子:

func sum(_ v1: Int, _ v2: Int, fn:(Int,Int)->Int){
    print(fn(v1,v2))
}

sum(1, 2, fn: {(v1:Int,v2:Int)->Int in return v1 + v2})

sum(2, 3) { (v1, v2) -> Int in
    v1 + v2
}

sum(3, 4, fn: {$0 + $1})
sum(4, 5){$0 + $1}

3.尾随闭包

如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性。即可以把大括号抽出来,放到后面。

例子:

func sum(_ v1: Int, _ v2: Int, fn:(Int,Int)->Int){
    print(fn(v1,v2))
}

sum(4, 5){$0 + $1}

如果闭包表达式是唯一实参,则可以不写括号。

例子:

func sum(fn: (Int,Int) -> Int) {
    print(fn(1,2))
}


sum{$0 + $1}

4.闭包

一个函数和它所捕获的变量\常量环境组合起来,称为闭包。一般定义在函数内部的函数,并且会捕获函数的局部变量或常量。

例子:

func getFn2() -> (Int) -> Int {
    var num = 0
    func sum(i: Int) -> Int{
        num += i
        return num
    }
    return sum
}

print(getFn2()(2))

5.自动闭包

swift使用 @autoclosure 来描述自动闭包,使用自动闭包可以让函数更加简洁,只支持()-> T 格式,空合运算符??就是使用 @autoclosure 技术。

例子:

func text(v1: Int, v2: ()-> Int) -> Int {
    return v1 > 0 ? v1 : v2()
}

text(v1: 2, v2: {5})

func text(v1: Int, v2: @autoclosure ()-> Int) -> Int {
    return v1 > 0 ? v1 : v2()
}

text(v1: 2, v2: 5)


上一篇文章:swift从入门到精通06-结构体和类

下一篇文章:swift从入门到精通08-属性