Swift闭包简述

来源:互联网 发布:域名映射ip 端口 编辑:程序博客网 时间:2024/06/05 20:05
首先了解闭包之前先要了解嵌套函数
嵌套函数是一种在较复杂函数中方便进行命名和定义自包含代码模块的方式。嵌套函数是闭包最简单的形式。
定义在函数体中的函数,称为嵌套函数(nested functions)。
默认情况下,嵌套函数是对外是不可见的,但可以被封闭他们的函数(enclosing function)调用。封闭函数可以返回它的一个嵌套函数,使这个函数在其他域中可以被使用。
//以下是一个嵌套函数的例子
funcGetMathfunc(type:String)->(Int)->Int
//定义该函数的返回类型为(Int)->Int,并根据参数选择返回不同的嵌套函数
{
   
func square(val:Int)->Int
    {
       
return val*val
    }
   
func cube(val:Int)->Int
    {
       
return val*val*val
    }
   
func factorial(val:Int)->Int
    {
       
var result = 1;
       
for index in 2...val
        {
            result*=index
        }
       
return result
    }
   
//定义了三个嵌套函数
    switch(type)
    {
       
case "square":
           
return square
       
case "cube":
           
return cube
       
default:
           
return factorial
    }
}
varmathFunc = GetMathfunc(type:"cube")
//调用mathFunc函数的时候返回的不是一个具体的值,而是一个函数cube的指针,这个指针指向变量mathFunc,所以mathFunc此时等同于cube函数,下面另外两个函数同理
print(mathFunc(5))//125
mathFunc= GetMathfunc(type:"square")
print(mathFunc(5))//25
mathFunc= GetMathfunc(type:"factorial")
print(mathFunc(5))//120


闭包表达式
Swift提供了简洁的闭包表达式来创建闭包
{(形参列表) ->返回值类型 in
   
//零条到多条的可执行语句
}

//定义一个计算平方的闭包表达式
var square = {(val: Int) ->Int in
   
return val*val
}




调用闭包

varsquare = {(val: Int)->Intin 
    return val*val
}
print(square(5))//25
print(square(3))//9
//闭包被赋值给square变量,因此程序可以通过调用该变量来调用该闭包

//第二种调用形参方式
varresult = {(a:Int,b:Int)->Intin
   
return a*b
}(
2,3)
print(result)//6
/*
 *
这种调用方式没有将闭包赋值给任何变量而是在定义闭包的同时调用该闭包
 *
闭包后面的圆括号(2,3)直接调用闭包并且直接传入对应的参数
 *
所以result的不是方法而是值
 */



Swift的闭包表达式还拥有简洁的风格,并鼓励在常见场景中以实现语法优化,主要优化有下面几种:
  • 利用上下文推断参数和返回值类型
  • 单表达式(single-expression)闭包可以省略 return 关键字
  • 参数名称简写
  • Trailing 闭包语法

1 0
原创粉丝点击