我有一个函数,看起来像这样:
func test(closure: () -> ()) {
let localClosure = { closure() }
localClosure()
}
这只是一个例子,没有充分反映我遇到的问题,在这里,我显然可以直接调用closure
!
很明显,在上面的代码中,closure
不能逃逸。但是,我却得到了如下错误:
闭包对非逃逸参数“closure”的使用可能会导致其逃逸
如果localClosure
以某种方式逃逸,那么我就能理解这个错误,但它并没有逃逸。我甚至尝试用@noescape
注释localClosure
(即使在Swift 3中已经废弃了该属性),根据我收到的警告:
@noescape是默认值,已被弃用
如果localClosure
默认是不逃逸的,那么为什么另一个非逃逸闭包不能进入其中?或者这是编译器的一个bug/限制吗?
localClosure
默认为@noescape
的错误警告有关,而实际上它并不是):为什么在Swift 3中闭包默认都是非逃逸的,但仍需要显式的self
? - Hamish@escaping
,整个讨论(和之前的答案)就会崩溃。投票标记为重复! - dfriblocalClosure
实际上是@escaping
,目前没有(非弃用的)标记它为非逃逸的方法*”。 - Hamish