2016-08-23 74 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 ...})