如何保存为CompletionHandler返回的值?
问题描述:
我有一个功能,使HTTP请求与completionhandler和接收的JSON响应:如何保存为CompletionHandler返回的值?
func makeRequest3(request: URLRequest, completion: @escaping (JSON!)->Void){
let task = URLSession.shared.dataTask(with: request){ data, response, error in
//Code
print(data as NSData)
let json = JSON(data: data)
completion(json)
}
task.resume()
}
我需要调用这个函数,并找到“id_token”字段保存在一个变量。林初学者和我尝试这种代码,但我有错误“类型‘()’无标会员”
var response2 = makeRequest3(request: request) {response in //<-`response` is inferred as `String`, with the code above.
return(response)
}
var idtoken = response2["id_token"]
我可怎么办呢?我使用swift3。
答
你makeRequest3
本身没有返回值,但响应被传递到完成处理,做需要在完成处理回复中的所有东西:
makeRequest3(request: request) {response in //<-`response` is inferred as `JSON`, with your `makeRequest3`.
var idtoken = response["id_token"]
//Use `idtoken` inside this closure
//...
}
您不能使用'return'因为请求将异步完成。你需要用关闭中的令牌*来完成你的工作。 – Paulw11