我的 swift 有问题。我正在尝试发送 API 请求,然后检索数据,但收到以下错误消息:
“Swift:转义闭包捕获非转义参数‘onCompletion’”。有谁知道我该如何解决这个问题?提前致谢
代码:
class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()
let baseURL = "http://api.randomuser.me/"
func getRandomUser(onCompletion : (JSON) -> Void) {
makeHTTPGetRequest(path: baseURL, onCompletion: { json, err -> Void in
onCompletion(json)
})
}
func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse) {
let request = NSMutableURLRequest(url : URL(string: path)! as URL)
let session = URLSession.shared
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
let json:JSON = JSON(data as Any)
onCompletion(json, error as NSError?)
})
task.resume()
}
}
Run Code Online (Sandbox Code Playgroud)
vad*_*ian 19
您必须用@escaping. 通常编译器会提供修复
class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()
let baseURL = "http://api.randomuser.me/"
func getRandomUser(onCompletion : @escaping (JSON) -> Void) {
makeHTTPGetRequest(path: baseURL, onCompletion: { json, err -> Void in
onCompletion(json)
})
}
func makeHTTPGetRequest(path: String, onCompletion: @escaping ServiceResponse) {
let request = NSMutableURLRequest(url : URL(string: path)! as URL)
let session = URLSession.shared
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
let json:JSON = JSON(data as Any)
onCompletion(json, error as NSError?)
})
task.resume()
}
}
Run Code Online (Sandbox Code Playgroud)
这里的答案是在完成处理程序参数声明之前添加@escaping,尽管对此进行了简短的解释。
\n这是我所缺少的完整图片,取自Swift 的文档:
\n\n\n逃离封闭
\n当闭包作为参数传递给函数时,称为转义函数,但在函数返回后调用。当您声明一个采用闭包参数之一的函数时,您可以在参数 xe2x80x99s 类型之前编写@escaping,以指示允许闭包转义。
\n
所以基本上,如果您希望在方法返回后调用完成处理程序,则它的定义如escapingswift 中所示,并且应声明如下:
func makeHTTPGetRequest(path: String, onCompletion: @escaping ServiceResponse)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
7452 次 |
| 最近记录: |