2016-10-30 61 views
0

我有一個功能,使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

回答

1

makeRequest3本身沒有返回值,但響應被傳遞到完成處理,做需要在完成處理回覆中的所有東西:

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