在使用逃逸闭包捕获非逃逸参数时,需要将非逃逸参数标记为 @escaping,以确保逃逸闭包能够安全地访问它。
例如,以下代码中,func foo(_ closure: () -> Void) 接受一个非逃逸闭包作为参数,但该闭包在嵌套的闭包(逃逸闭包)中被捕获。由于捕获的闭包需要逃逸,因此closure需要标记为 @escaping。
func foo(_ closure: @escaping () -> Void) {
// 在嵌套的闭包中捕获闭包
let nestedClosure = {
closure()
}
// 调用嵌套闭包
nestedClosure()
}
如果没有将非逃逸参数标记为 @escaping,Xcode将会抛出'Escaping closure captures non-escaping parameter”错误。
func foo(_ closure: () -> Void) {
// 错误示范:逃逸闭包捕获非逃逸参数
let nestedClosure = {
closure()
}
// 调用嵌套闭包
nestedClosure()
}
下一篇:捕获嵌套的接口值