2016-03-06 23 views
1

當我在網絡開發章節閱讀關於swift的書時,我遇到了一些我無法理解的代碼。代碼如下:urlSession.dataTaskWithRequest(請求)的含義

let sessionTask = urlSession.dataTaskWithRequest(request) { 
      (data, response, error) in 

      handler(response, data) 
      } 

此功能的迅速的原型爲:

public func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask 

正如你可以看到,原型具有2個參數,一個是請求,另一個是completionHandler。但在上面的代碼中,它也有一個參數。而且我也無法理解大括號中的代碼,3個可變數據,響應,錯誤是從哪裏來的?我無法找到3個變量的任何定義。誰可以幫助我理解代碼,在此先感謝。

回答

0

它被稱爲尾隨閉包,如果該函數是最後一個參數,則它是將函數傳遞給另一個函數的更簡潔的方法。相同的代碼可以寫爲:

let sessionTask = NSURLSession.sharedSession() 
let request = NSURLRequest() 
sessionTask.dataTaskWithRequest(request, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 

}) 

如果你需要一個封閉表達式傳遞給函數作爲函數的最後一個參數和封蓋表現爲長,它可以把它寫成一個尾隨有用取而代之。甲後閉合是的函數的括號外(和之後)寫入一個閉合表達式稱之爲支持

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID102

func aFunction(callback: (done: Bool) -> Void) { 
    let finished = true 
    callback(done: finished) 
} 

aFunction { (done) -> Void in 
    print("we are done \(done)") 
} 
+0

確定,現在我明白尾部封閉的語法,但3個變量的數據,響應,錯誤來自哪裏,它們是否來自http請求的響應請求? – Coinnigh

+0

從NSURLSession的dataTaskWithRequest方法傳入3個變量數據,響應,錯誤。 –

+0

我的意思是,當我們將一個參數傳遞給一個函數時,我們應該首先定義它,例如: – Coinnigh