所以我复制了Ray Wenderlich的Swifty JSON教程中的一些代码,并且无法理解我正在进行的一些调用。
我已经浏览了SwiftyJSON库,我查看了开发者网站上的NSURL描述,并查看了Swift指南,但我找不到它,或者我得到了一堆miscellania。
这些成功电话意味着什么?
func getIndexWithSuccess(success: ((indexData: NSData!) -> Void)) {
loadDataFromURL(NSURL(string: url)!, completion:{(data, error) -> Void in
if let urlData = data {
/* HERE */
success(indexData: urlData)
}
})
}
func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) {
var session = NSURLSession.sharedSession()
let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if let responseError = error {
completion(data: nil, error: responseError)
} else if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode != 200 {
var statusError = NSError(domain:"com.raywenderlich",
code:httpResponse.statusCode,
userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."])
completion(data: nil, error: statusError)
} else {
completion(data: data, error: nil)
}
}
})
loadDataTask.resume()
}
}
答案 0 :(得分:0)
请注意:
func getIndexWithSuccess(success: ((indexData: NSData!) -> Void)) {
这意味着成功是一个参数。结肠后面的内容是关闭。
success
因此是一个闭包。
现在,我们应该如何解释这种封闭?
注意,为清楚起见,上面的闭包括一些额外的括号。
您可以通过删除它们来缩短上述内容:
func getIndexWithSuccess(success: (indexData: NSData!) -> Void) {
更多有用的链接:
http://fuckingclosuresyntax.com
http://fuckingswiftblocksyntax.com
编辑:
在这种情况下,最明确的解释可能就是重新排列:
func getIndexWithSuccess(
success: (
data: [DoctorModel]
)->(
Void
),
moreInfo: String = "This is another parameter, but the trailing closure technique wont work"
) {
以上符合。但是moreInfo参数也是如此。尾随闭包不起作用。通过重新排列参数以使闭包最后,您可以使用尾随闭包技术。