Swift iOS : 自动闭包autoclosure

如下为官方文档的定义,但是建议你忽略它,搞懂了自动闭包再来看才容易懂:)

自动闭包是一种自动创建的闭包,用于包装传递给函数作为参数的表达式。这种闭包不接受任何参数,当它被调
用的时候,会返回被包装在其中的表达式的值。这种便利语法让你能够省略闭包的花括号,用一个普通的表达式
来代替显式的闭包。复制代码

这是一个正常的闭包的定义和调用:

func foo(_ i:() -> Int) {
    print(i())
}
foo({return 42})复制代码

结果会打印42出来。可以使用{}创建一个闭包,并把它传递到foo函数,foo函数会打印此闭包的返回结果。当然,因为返回值明确,可以省略return。让代码更加简洁。

    func foo(_ i:() -> Int) {
        print(i())
    }
    foo({42})复制代码

你也常常会使用尾随闭包,把最后一行写成:

    foo(){42}复制代码

或者:

    foo{42}复制代码

然而,使用自动闭包,代码可以更省,省掉{},就像这样:

func bar(_ i:@autoclosure () -> Int) {
    print(i())
}
bar(42)复制代码

42只是一个返回整数的表达式,为什么可以传递给类型为闭包的参数呢?因为加上了@autoclosure标记后,编译器会自动把传递的表达式加上{},从而转换为闭包。这里的自动就体现在此了。要求就是表达式的返回值和闭包的返回值类型一致即可。

现在你回头看,官方文档字字都对。但是之前是看不懂的。起码我看不懂。

能省则省,这样的语法,尽管程序员不一定都用它,但是喜欢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值