2015-04-22 48 views
1

因此,我複製了Ray Wenderlich的Swifty JSON教程的一些代碼,並且無法理解我所做的一些調用。這個成功的方法是什麼? (Swift Closure)

我已經掃描了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

我曾嘗試過兩次「Ray Wenderlich」演示。沒有工作。尋找另一個來源。 –

+0

@ThomasKilian - 爲我工作。我只是不知道成功電話意味着什麼! – ovatsug25

回答

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參數也是如此。追尾關閉不起作用。通過重新排列參數使閉包持續下去,您可以使用尾部閉合技術。

+0

@ThomasKilian - 這是我所知道的;) – ovatsug25