美文网首页
@autoclosure和@noescape和@escape

@autoclosure和@noescape和@escape

作者: FengxinLi | 来源:发表于2016-11-02 14:07 被阅读30次

1:自动闭包,顾名思义是一种自动创建的闭包,用于包装函数参数的表达式,可以说是一种简便语法.

2:自动闭包不接受任何参数,被调用时会返回被包装在其中的表达式的值。

3:自动闭包的好处之二是让你能够延迟求值,因为代码段不会被执行直到你调用这个闭包,这样你就可以控制代码什么时候执行。

4:含有autoclosure特性的声明同时也具有noescape的特性,及默认是非逃逸闭包,除非传递可选参数escaping.如果传递了该参数,那么将可以在闭包之外进行操作闭包,形式为:请使用@autoclosure(escaping)。

func printIfTrue(predicate: ()-> Bool){

if predicate(){

print("the result is true")

}

}

//1直接调用方法

printIfTrue { () -> Bool in

return 2 > 1

}

//2闭包在圆括号内

printIfTrue(predicate: { return 2 > 1 })

//3:使用尾部闭包方式,闭包体在圆括号之外

printIfTrue(){ return 2 > 1 }

//4:在 Swift 中对闭包的用法可以进行一些简化,在这种情况下我们可以省略掉 return,写成:

printIfTrue(predicate: { 2 > 1})

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

printIfTrue{2 > 1}

但是不管哪种方式,表达上不太清晰,看起来不舒服。于是@autoclosure就登场了。我们可以改换方法参数,在参数名前面加上@autoclosure关键字:

func printIfTrue( predicate: @autoclosure ()-> Bool){

if predicate(){

print("the result is true")

}

}

printIfTrue( predicate:2 > 1 )

@noescape属性是在 Swift1.2中引入的,把传入闭包参数的调用限制在调用的函数体内,对性能有一定的提升

默认情况下,闭包是@escape的。表示此闭包还可以被其他闭包调用。

isKindOfClass 可以判断某对象是否是某个类的实例对象,这个类和这个类的继承类都可以判断;

而isMemberOfClass只能判断对象是否是当前类的实例对象。

如果我们遇到了多重 Optional 的麻烦的时候,这显然对我们是没有太大帮助的。我们可以使用 fr v -R 命令来打印出变量的未加工过时的信息。

相关文章

  • @autoclosure、@noescape和@escape

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

  • @autoclosure和@noescape和@escape

    1:自动闭包,顾名思义是一种自动创建的闭包,用于包装函数参数的表达式,可以说是一种简便语法. 2:自动闭包不接受任...

  • swift:Closure 闭包

    @noescape @autoclosure @autoclosure(escaping)

  • Swift中的一些关键字

    noescape和autoclosure noescape:这个关键字告诉编译器,参数闭包只能在函数内部使用。它不...

  • swift中的@noescape和@autoclosure

    //非逃逸闭包(指明闭包是在函数前执行,不能用于外部应用,另外声明了非逃逸闭包后,在闭包中不用添加self(非逃逸...

  • [Swift学习]莫名其妙的标记之@noescape

    Swift 中经常遇到一些不熟悉的关键字, 例如@autoclosure, @noescape...等等, 为什么...

  • Swift关键词简介

    Swift关键词简介 我们会经常看到@autoclosure, @noescape等关键词,下面就来简单的说下他们...

  • @autoclosure 和 ??

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

  • @autoclosure 和 ??

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

  • Swift @ escape @noescape 作用(转)

    这里需要先介绍一下escape的概念。当一个闭包当做一个参数传进函数里,这个闭包是在这个函数执行完后执行的,这个时...

网友评论

      本文标题:@autoclosure和@noescape和@escape

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