欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

《从零开始学Swift》学习笔记(Day 23)——尾随闭包

程序员文章站 2022-05-26 15:53:33
闭包表达式可以作为函数的参数传递,如果闭包表达式很长,就会影响程序的可读性。尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。 下面我们来看一个示例代码: func...
闭包表达式可以作为函数的参数传递,如果闭包表达式很长,就会影响程序的可读性。尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。
下面我们来看一个示例代码:
func calculate(opr:string, funn:(int,int)-> int) {
//最后一个参数funn是(int,int)-> int函数类型,funn可以接收闭包表达式
  
    switch (opr) {
    case "+" :
        print("10 + 5 =\(funn(10,5))")
    default:
        print("10 - 5 =\(funn(10,5))")
    }
}
  
calculate("+",funn: {(a:int, b:int) -> int in return a + b })  //调用
calculate("+"){(a:int, b:int)-> int in return a + b }//调用,这种形式就是尾随闭包
calculate("+") {$0 + $1 }  //调用,这种形式就是尾随闭包

func calculate(opr:string, funn:(int,int)-> int) {
//最后一个参数funn是(int,int)-> int函数类型,funn可以接收闭包表达式
 
    switch (opr) {
    case "+" :
        print("10 + 5 =\(funn(10,5))")
    default:
        print("10 - 5 =\(funn(10,5))")
    }
}
 
calculate("+",funn: {(a:int, b:int) -> int in return a + b })  //调用
calculate("+"){(a:int, b:int)-> int in return a + b }//调用,这种形式就是尾随闭包
calculate("+") {$0 + $1 }  //调用,这种形式就是尾随闭包

需要注意的是,闭包必须是参数列表的最后一个参数,如果calculate函数采用如下形式定义:
func calculate(funn:(int,int)->int,opr:string) {
...
}
由于闭包表达式不是最后一个参数,那么调用calculate函数就不能使用尾随闭包写法的。