1

因此,我从 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()
    }
}
4

1 回答 1

0

请注意,它说:

func getIndexWithSuccess(success: ((indexData: NSData!) -> Void)) {

这意味着成功是一个参数。冒号之后是闭包。

success,因此是一个闭包。

现在,我们应该如何解释这个闭包?

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

请注意,为清楚起见,上面的闭包包括一些额外的括号。

您可以通过删除它们来缩短上述内容:

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 参数也是如此。尾随关闭不起作用。通过重新排列参数以使闭包在最后,您可以使用尾随闭包技术。

于 2015-04-22T19:06:03.107 回答