这种成功方法是什么? (快速关闭)

时间:2015-04-22 18:00:47

标签: swift swifty-json

所以我复制了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()
    }
}

1 个答案:

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