我是第一次使用Swift并使用AlamoFire库构建应用程序。我之前使用Obj-C和AFNetworking构建了应用程序,但是我很难使用这种Swift响应方法:
Alamofire.request(.GET, "http://someapi.com/thing.json")
.responseJSON { _, _, JSON, _ in
println(JSON)
}
实际的方法定义是:
public func responseJSON(options: NSJSONReadingOptions = .AllowFragments, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) -> Self {
return response(serializer: Request.JSONResponseSerializer(options: options), completionHandler: { request, response, JSON, error in
completionHandler(request, response, JSON, error)
})
}
当我使用这种响应方法时,我真的不明白这里发生了什么。
为什么我在方法调用中没有使用parens?
我只是将块或匿名函数传递给此方法吗?
传递下划线(_
)有什么意义?
in
关键字在做什么?
答案 0 :(得分:3)
没有parens:那是尾随闭包语法。想法是封闭可以变长,难以记住/确定长距离对子。
是,block =匿名函数=(匿名)关闭。是的,您将其作为唯一参数传递。由于它被省略,'options'的默认值为'.AllowFragments'。尾随闭包PriorityQueue
绑定到{ ... }
参数。
'_'是'不关心此参数'的语法...例如如果该函数不使用该参数,则无需给它一个本地名称。
completionHandler
是闭包语法的一部分:表示函数体的开始。绝对阅读上面的整个闭包语法章节。它的设计非常简洁,没有任何直观的。