美文网首页Swift
为什么可选类型的closure参数不需要加@escaping

为什么可选类型的closure参数不需要加@escaping

作者: Sweet丶 | 来源:发表于2021-09-28 09:49 被阅读0次

在传参时,如果closure参数是在当前函数作用域执行完之前调用的,closure是非逃逸闭包;如果是在作用域以外的地方调用,则是逃逸闭包。
在我们使用时,发现如果传参数是可选的闭包时,加上@escaping会报错Closure is already escaping in optional type argument

static func dismiss(onCompletion: @escaping VoidFunction?) {
   // 报错Closure is already escaping in optional type argument
}

原因是:
Actually, since Swift 3 has been released, the closure will be "escaped" if it's declared in enum, struct or class by default.

Obviously, Optional is enum. 所以可选类型的闭包参数本身就是逃逸闭包,不需要再加@escaping

相关文章

  • 为什么可选类型的closure参数不需要加@escaping

    在传参时,如果closure参数是在当前函数作用域执行完之前调用的,closure是非逃逸闭包;如果是在作用域以外...

  • swift : Escaping closure capture

    Escaping closure captures non-escaping parameter 'complet...

  • 注意事项

    1. @escaping 无法加在可选参数前面 只有在函数参数位置的闭包才是默认非逃逸的。包括可选(Optiona...

  • 尝试理解Swift中的@escaping

    要理解@escaping,首先需要理解closure, 要理解closure,首先理解匿名函数。 先理解匿名函数 ...

  • Swift中的@escaping

    要理解@escaping,首先需要理解closure, 要理解closure,首先理解匿名函数。先理解匿名函数要在...

  • 再识变量和常量

    1.声明变量的方式 当变量类型是可选类型的时候 使用的参数不是可选类型 可在这个变量赋值过后再在后面加!来表明这个...

  • (十三) [Swift]Swift中的Closure

    1.完整的定义一个closure 省略参数类型 单语句closure可以省略return 终极简化,将参数用$1,...

  • @escaping修饰block

    Escaping Closure=(逃逸闭包)如果一个闭包被作为一个参数传递给一个函数, 并且在函数return之...

  • Escaping and Nonescaping Closure

    本文翻译自这里 函数与闭包在Swift中作为一等公民,可以存储,当作参数传递,并且把它们看待成其他的对象或者类型。...

  • swift中在闭包内修改结构体的内容

    逃逸闭包不可 上面代码会报错:“Escaping closure captures mutating 'self'...

网友评论

    本文标题:为什么可选类型的closure参数不需要加@escaping

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