2016-08-23 69 views
0

我無法理解下面的語法在alamofire庫的功能,只有點分離的方法。撥打斯威夫特

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 ...})