2016-09-06 19 views
1

Swift用に作成されたAlamofireネットワーキングライブラリを調べています。私はresponseJSON機能に遭遇している:私の質問は単純ですAlamofireレスポンスでVoidを返す構造体

public func responseJSON(
     queue queue: dispatch_queue_t? = nil, 
     options: NSJSONReadingOptions = .AllowFragments, 
     completionHandler: Response<AnyObject, NSError> -> Void) 
     -> Self 
    { 
     return response(
      queue: queue, 
      responseSerializer: Request.JSONResponseSerializer(options: options), 
      completionHandler: completionHandler 
     ) 
    } 

Response<AnyObject, NSError> -> Voidは何を意味するのでしょうか?この行は、responseJSONメソッドの完了ハンドラが、タイプがResponse<AnyObject, NSError> -> Voidの関数タイプを取ることを意味していますか?その場合、それは(Response<AnyObject, NSError>) -> Voidだったはずですか?

スウィフトの構文から新しくなったのは、Response構造体自体がVoidを返していて、Response<AnyObject, NSError> -> Voidは関数型ではなく、むしろVoid関数であると信じています。

誰かが私にこれをクリアしてもらえますか?

答えて

0

これは何も返さない関数型のResponseを持つクロージャです。

補完ハンドラであるため、応答の処理を担当する関数を渡す必要があります。

それはあなたがスウィフトに新しいしているので、私はホルストの答えについては詳しく説明し自由を取っている

.responseJSON({ response in 
//your logic 
}) 
0

することができます。クロージャは、コードのある時点で実行される(実際には関数のような)コードのブロックです。したがって、Alamofire.request(###).responseJSON(completionHandler: yourHandler)と書くと、Alamofireにリクエストを開始するように指示しています。また、(呼び出しが非同期であるため)サーバからの応答を受け取った後で実行するコードを与えることもできます。 Alamofireのコードのどこかで、リクエストが完了すると、パラメータがで提供されたcompletionHandler(response)クロージャが呼び出されます。

Response<AnyObject, NSError> -> Voidという署名は、クロージャがクロージャのコードで使用できる1つの引数を取ることを意味します。つまり、Alamofireがクロージャのコード内で使用できるレスポンスオブジェクトを提供します。 Swiftにクロージャを書くための短くエレガントな方法は、Horstが書いたものに似ています。

Alamofire.request(###).responseJSON {response in 
    // Your code 
    switch response { 
    case .Success(let json): 
     // Use the json 
    case .Failure(let error): 
     // Use the error 
    } 
} 
関連する問題