Swift学习

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

2019-08-02  本文已影响0人  林夕copy

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

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
}
上一篇 下一篇

猜你喜欢

热点阅读