在Swift中仅使用点分隔符调用方法

时间:2016-08-23 17:42:50

标签: ios swift methods

我无法理解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 ....}

1 个答案:

答案 0 :(得分:3)

  

为什么responseJSON方法没有前缀?

如果从编译器的角度来看,responseJSON有一个前缀:responseJSON是一个在请求方法的结果上调用的方法。 由于回车和缩进,它似乎没有前缀,但你可以在请求方法的右括号后放置.responseJSON函数。

这是Alamofire开发人员的设计选择:请求函数返回调用它的同一对象,因此您可以在同一个对象上调用另一个函数,而无需重复Alamofire前缀。 这种情况很常见,您需要在同一个对象上调用多个函数来设置。

  

为什么这个方法在它的主体中有一个完成处理程序,它不应该是方法的参数吗?

在Swift中,如果方法或函数的唯一参数是闭包(例如,完成处理程序),则可以缩写并写入

.responseJSON { response in ... }

而不是

.responseJSON ({response in ...})

.responseJSON(){ response in ...})