2014-12-04 41 views
0

我在AlamoFire LIB代碼一目瞭然學習的東西更多一點,我已經發現了這樣的定義:快速調用回調函數。它如何有用?

var dataTaskDidReceiveData: ((NSURLSession!, NSURLSessionDataTask!, NSData!) -> Void)? 

我想它定義了dataTaskDidReceiveData是一些PARAMS和沒有返回的回調。

然後我看到,這個回調是用來在一個「奇怪」的辦法,我無法理解:

func URLSession(session: NSURLSession!, dataTask: NSURLSessionDataTask!, didReceiveData data: NSData!) { 
     if let delegate = self[dataTask] as? Request.DataTaskDelegate { 
      delegate.URLSession(session, dataTask: dataTask, didReceiveData: data) 
     } 

     dataTaskDidReceiveData?(session, dataTask, data)//?????? 
    } 

這怎麼調用工作到底是什麼?

 dataTaskDidReceiveData?(session, dataTask, data)//?????? 
+0

我認爲你應該接受下面的答案。 – Rob 2015-12-02 18:56:47

回答

2

dataTaskDidReceiveData被定義爲可選閉包。 ?是可選的鏈接操作符。所以dataTaskDidReceiveData?(session, dataTask, data)的內容如下:如果dataTaskDidReceiveData不是零呼叫dataTaskDidReceiveData收尾,否則什麼都不做。