认识函数类型
每个函数都有特定的函数类型
函数类型是由函数的形参类型、->和返回值类型组成。
例如:
func Add(a:Int,b:Int){
...
}
该函数的函数类型为(Int,Int)->Void或者(Int,Int)->()
func Add()->Int{
...
}
该函数的函数类型为()->Int
func Add(){
...
}
该函数的函数类型为()->()或者()->Void
func Add(a:Int,b:Int)->Int{
...
}
该函数的函数类型为(Int,Int)->Int
使用函数类型
定义变量
定义变量,其类型为(Int,Int)->Int
var myadd:(Int,Int)->Int
func Add(a:Int,b:Int)->Int{
return a+b
}
myadd=Add
print(myadd(3,4))
//输出7
当函数类型和我们定义的变量类型一致的时候我们就能够赋值成功。
函数类型作为形参类型
有些时候我们写一个函数,这个函数的大部分逻辑是十分确定的,但某些处理逻辑是无法确定的需要根据具体情况进行动态的改变。这个时候我们可以在函数中定义函数类型的形参,这样在调用该函数的时候传入不同的函数作为参数,从而动态的改变函数的功能。
func add(var a:Int,var b:Int,fn:(Int)->Int)->Int
{
return a+fn(b)
}
//不对b进行改变
funcOnlyb(val :Int)->Int
{
return b;
}
//对b进行平方改变
func square(val:Int)->Int
{
return b*b
}
对b进行立方改变
func cube (val:Int)->Int
{
return b*b*b
}
print(add(3,4,fn:Onlyb))//输出7
prin(add(3,4,fn:square))//输出19
print(add(3,4,fn:cube))//输出67
分析代码:我们在上面程序中,有两个变量的值是不变的,但对第二个变量进行变化是动态的,可能需要平方操作或者立方操作,也可能不需要任何操作。
使用函数类型作为返回值类型
func squar (val:Int)->Int
{
return val*val
}
func cube (val:Int)->Int
{
return val*val*val
}
func Onlyb (val:Int)Int
{
return b
}
//注意返回值类型为(Int)->Int
func Math(#type:String)->(Int)->Int
{
switch(type)
{
case"square":
return square
case "Onlyb":
returnOnlyb
case "cube":
return cube
default:
print("输入函数错误呀")
}
var math=Math(type:"cube")
print(math(5))//输出125
}