美文网首页swiftswift相关
swift @autoclosure(自动闭包)

swift @autoclosure(自动闭包)

作者: ikonan | 来源:发表于2018-08-06 16:08 被阅读4次

Apple 为了推⼲和介绍 Swift,破天荒地为这⻔语⾔开设了⼀个博客(当然我觉着是因为 Swift 坑太多需要⼀个地⽅来集中解释)。其中有⼀篇提到了⼀个叫做 @autoclosure 的关键词。

@autoclosure 可以说是 Apple 的⼀个⾮常神奇的创造,因为这更多地是像在 “hack” 这⻔语⾔。简单说, @autoclosure 做的事情就是把⼀句表达式⾃动地封装成⼀个闭包 (closure)。这样有时候在语法上看起来就会⾮常漂亮。

⽐如我们有⼀个⽅法接受⼀个闭包,当闭包执⾏的结果为 true 的时候进⾏打印:

func logIfTrue(_ predicate: () -> Bool) {
  if predicate() {
    print("true")
  }
}

在调⽤的时候,我们需要写这样的代码

logIfTrue({return 2 > 1}

当然,在 Swift 中对闭包的⽤法可以进⾏⼀些简化,在这种情况下我们可以省略掉 return ,写成:

logIfTrue({2 > 1})

还可以更近⼀步,因为这个闭包是最后⼀个参数,所以可以使⽤尾随闭包 (trailing closure) 的⽅式把⼤括号拿出来,然后省略括号,变成:

logIfTrue{2 > 1}

但是不管哪种⽅式,要么是书写起来⼗分⿇烦,要么是表达上不太清晰,看起来都让⼈⽣⽓。于是 @autoclosure 登场了。我们可以改换⽅法参数,在参数名前⾯加上 @autoclosure 关键字:

 func logIfTrue(_ predicate:@autoclosure () -> Bool) {
        if predicate() {
            print("true")
        }
    }

这时候我们就可以直接写:

logIfTrue(2>1)

相关文章

  • ios 经典面试案例 (六)

    Swift autoclosure的作用? 1:自动闭包,顾名思义是一种自动创建的闭包,用于包装函数参数的表达式,...

  • swift @autoclosure(自动闭包)

    Apple 为了推⼲和介绍 Swift,破天荒地为这⻔语⾔开设了⼀个博客(当然我觉着是因为 Swift 坑太多需要...

  • Swift 关于AUTOCLOSURE 和 ??

    转正:autoclosure:可理解为自动识别的闭包http://swifter.tips/autoclosure/

  • 自动闭包@autoclosure

    自动闭包@autoclosure 什么是自动闭包 自动闭包就是把一个表达式直接自动闭合一个闭包,这样看起来就比较好...

  • @autoclosure(自动闭包)

    Apple 为了推⼲和介绍 Swift,破天荒地为这⻔语⾔开设了⼀个博客(当然我觉着是因为 Swift 坑太多需要...

  • Swift学习 - 初学 @autoclosure

    前言 对于从OC转入Swift的我来说,自动闭包(@autoclosure)是一个新事物,从字面解释看,是可以把方...

  • @autoclosure 和 ??

    自动关闭关键字 @autoclosure 使用与参数类型的()-> T 的闭包 ,这个闭包的参数为空,带有参数的闭...

  • @autoclosure、@noescape和@escape

    @autoclosure:字面意思为自动闭包,该关键字用于在函数或者方法的闭包类型参数前面,但是闭包类型被限定在无...

  • 从??(空合运算符)看autoclosure

    ## 1:autoclosure初识 先看一下书上的解释:自动闭包是一种自动创建的闭包,用于包装传递给函数作为参数...

  • Swift基础知识

    autoclosure @autoclosure 做的事情就是把一句表达式自动地封装成一个闭包。用法就是在类型签名...

网友评论

    本文标题:swift @autoclosure(自动闭包)

    本文链接:https://www.haomeiwen.com/subject/izkgvftx.html