这个成功方法是什么? (Swift 关闭)
What is this success method? (Swift Closure)
所以我从 Ray Wenderlich 的 Swifty JSON 教程中复制粘贴了一些代码,但无法理解我所做的一些调用。
我浏览了 SwiftyJSON 库,查看了开发者网站上的 NSURL 描述,并查看了 Swift 指南,但我要么不能'找不到它,否则我会得到一堆杂货。
这些成功调用是什么意思?
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()
}
}
注意上面写着:
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 参数也是如此。尾随闭包将不起作用。通过重新排列参数使闭包位于最后,您可以使用尾随闭包技术。
所以我从 Ray Wenderlich 的 Swifty JSON 教程中复制粘贴了一些代码,但无法理解我所做的一些调用。
我浏览了 SwiftyJSON 库,查看了开发者网站上的 NSURL 描述,并查看了 Swift 指南,但我要么不能'找不到它,否则我会得到一堆杂货。
这些成功调用是什么意思?
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()
}
}
注意上面写着:
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 参数也是如此。尾随闭包将不起作用。通过重新排列参数使闭包位于最后,您可以使用尾随闭包技术。