加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift闭包

发布时间:2020-12-14 02:35:22 所属栏目:百科 来源:网络整理
导读:在Swift中,函数也可以作为一种类型: 比如如下test函数,它的入参opera的类型就是是一个入参是两个Double,出参是一个Double的函数 func test (opera: (Double,Double)-Double) { opera ( 1.0 , 1.0 ) } func paramFun (op1:Double,op2:Double) - { return

在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
    }
)

我们可以看到最终的结果非常的简洁。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读