如何保存为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。

+0

您不能使用'return'因为请求将异步完成。你需要用关闭中的令牌*来完成你的工作。 – Paulw11

makeRequest3本身没有返回值,但响应被传递到完成处理,做需要在完成处理回复中的所有东西:

makeRequest3(request: request) {response in //<-`response` is inferred as `JSON`, with your `makeRequest3`. 
    var idtoken = response["id_token"] 
    //Use `idtoken` inside this closure 
    //... 
}