2016-08-23 12 views
0

alamofireライブラリの関数で、次の構文を理解するのに問題があります。Swiftのドット区切り文字でメソッドを呼び出す

Alamofire.request(.GET, "https://someWebsite.com/api/", parameters: ["key":"2121"]) 
     .responseJSON { response in 
        if let JSON = response.result.value { 
         print("JSON: \(JSON)") 
        } 
      } 

なぜresponseJSONメソッドにプレフィックスがありますか?さらに、なぜこのメソッドはそのメソッドのパラメータではないはずですが、本文に完了ハンドラがありますか?すなわち

.responesJSON(response in ...) 

OR

.responseJSON(){respones in ....} 

答えて

3

なぜresponseJSON方法は、接頭辞を持っていませんか?

コンパイラの観点から見ると、responseJSONには接頭辞が付きます。responseJSONは、リクエストメソッドの結果で呼び出されるメソッドです。 キャリッジリターンとインデントのためにプレフィックスがないようですが、要求メソッドの閉じ括弧の直後に.responseJSON関数を置くことができます。

これは、Alamofire:request関数の開発者が設計したもので、呼び出されたオブジェクトと同じオブジェクトを返すため、Alamofireプレフィックスを繰り返さなくても同じオブジェクトに対して別の関数を呼び出すことができます。 これは、同じオブジェクトで複数の関数を呼び出して設定する必要があるこのタイプのシナリオでよく起こります。

なぜこのメソッドは本体に完了ハンドラを持っていますか?メソッドのパラメータではありませんか?スウィフトは

、メソッドや関数のパラメータのみが閉鎖(例えば完了ハンドラ)である場合は、省略形を作り、

.responseJSON { response in ... } 

代わりの

.responseJSON ({response in ...}) 
を書くことができます

または

.responseJSON(){ response in ...}) 
関連する問題