use*_*482 11 ios completionhandler swift xcode8
我有以下功能,我有完成处理程序,但我收到此错误:
Closure use of non-escaping parameter may allow it to escape
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
func makeRequestcompletion(completion:(_ response:Data, _ error:NSError)->Void) {
let urlString = URL(string: "http://someUrl.com")
if let url = urlString {
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, urlRequestResponse, error) in
completion(data, error) // <-- here is I'm getting the error
})
task.resume()
}
}
Run Code Online (Sandbox Code Playgroud)
我真的很感谢你的帮助
Mar*_*sso 10
看起来你需要明确定义允许闭包转义.
当闭包作为参数传递给函数时,闭包被称为转义函数,但在函数返回后调用.当您声明一个以闭包作为其参数之一的函数时,您可以在参数的类型之前编写@escaping以指示允许闭包转义.
TLDR; @escaping在完成变量后添加关键字:
func makeRequestcompletion(completion: @escaping (_ response:Data, _ error:NSError)->Void) {
let urlString = URL(string: "http://someUrl.com")
if let url = urlString {
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, urlRequestResponse, error) in
completion(data, error) // <-- here is I'm getting the error
})
task.resume()
}
}
Run Code Online (Sandbox Code Playgroud)