美文网首页
swift @escaping

swift @escaping

作者: 山有木枝壮 | 来源:发表于2018-11-20 11:05 被阅读4次

    @escaping用于函数参数,作用于闭包

    如果一个闭包被作为一个参数传递给一个函数,并且在函数return之后才被唤起执行,那么这个闭包是逃逸闭包。
    

    在swift2中,有@noescape属性,对应非逃逸闭包,也就是在return之前就被调用,因为闭包在方法调用完成之后就会销毁,不会存在强引用,因此非逃逸闭包中不需要做weak self操作。

    在swift3中去掉了@noescape,引入了@escaping,并给将所有的闭包默认作为非逃逸闭包。

        public func myFunction(myHandler: @escaping () -> Void) {
            print("this is my Function")
            DispatchQueue.main.async {
                myHandler()
            }
        }
    

    在上面的例子中,myHandler作为闭包传递到了主线程中执行,可以把主线程认为是一个异步的方法,因为方法执行完成之后可能闭包还没有执行,因此闭包myHandler可能逃出方法,如果不写@escaping,方法编译会通不过,报错如下:


    非逃逸闭包报错

    相关文章

      网友评论

          本文标题:swift @escaping

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