美文网首页Swift学习
可选型闭包(Optional Closure)用作逃逸闭包时不用

可选型闭包(Optional Closure)用作逃逸闭包时不用

作者: 林夕copy | 来源:发表于2019-08-02 14:43 被阅读0次

当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,这样的闭包称为逃逸闭包

var oneClosure: (() -> Void)? = nil

func getEscapeClosure(closure: @escaping () -> Void?) {
    self.oneClosure = closure
}

getEscapeClosure {
    print("This is closure")
}

oneClosure?() //This is closure

但是当方法的参数是可选型的参数时添加@escaping会报错:

func getEscapeClosure(closure: @escaping (() -> Void)?) {
        self.closure = closure
}
//@escaping attribute only applies to function types

这是一个很早就被发现的问题SR-2444。可选型闭包(Optional Closure)的定义就是escaping属性。推荐正确的使用方式:

typealias NormalClosure = () -> Void
func getEscapeClosure(closure: NormalClosure?) {
        self.closure = closure
}

相关文章

网友评论

    本文标题:可选型闭包(Optional Closure)用作逃逸闭包时不用

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