2016-10-30 3 views
0

私はcompletionhandlerでHTTPリクエストを行い、次の機能を持っており、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 
    //... 
} 
関連する問題