在Swift中,函数也可以作为一种类型:
比如如下test函数,它的入参opera的类型就是是一个入参是两个Double,出参是一个Double的函数
func test(opera: (Double,Double)->Double){ opera(1.0,1.0) } func paramFun(op1:Double,op2:Double) -> {
return op1*op2
}
test(paramFun)
我们可以改进一下上面的写法:
不需要单独在外面写paramFun()的定义
直接用匿名函数的方式把函数作为参数传递给test函数
func test(opera: (Double,1.0) } test( func paramFun(op1:Double,op2:Double) -> { return op1*op2 } )
再改进一点,我们根本就不需要知道它的函数名paramFun
把函数名字去掉,并且把 ‘{‘括号提前 改写成如下:
func test(opera: (Double,1.0) } test( { (op1:Double,op2:Double) -> Double in return op1*op2 } )
这就是一种闭包方式的写法
再改进一点
因为test函数的定义是test(opera:(Double,Double)->Double)所以它知道它的参数 (op1:Double,op2:Double)->Double 其中op1 和 op2一定是Double类型的,并且返回类型也是Double的。
所以我们可以进一步简化为如下结果
test(
{
(op1,op2) in
op1*op2
}
)
再进一步简化。swift不强制要求你写函数参数
所以可以更进一步简化为:
test(
{
$0*$1
}
)
我们可以看到最终的结果非常的简洁。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。