快速调用回调函数。它如何有用?

问题描述:

我在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

dataTaskDidReceiveData被定义为可选闭包。 ?是可选的链接操作符。所以dataTaskDidReceiveData?(session, dataTask, data)的内容如下:如果dataTaskDidReceiveData不是零呼叫dataTaskDidReceiveData收尾,否则什么都不做。