在swift中调用回调。它有用吗?

时间:2014-12-04 07:37:39

标签: swift

我瞥了一眼AlamoFire lib代码,了解更多关于它的信息,我发现了这个定义:

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

我认为它定义了dataTaskDidReceiveData是一个带有一些参数并且没有返回的回调。

然后我看到这个回调以一种我无法理解的“奇怪”方式使用:

    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)//??????

1 个答案:

答案 0 :(得分:2)

dataTaskDidReceiveData被定义为可选闭包。 ?是可选的链接运算符。所以dataTaskDidReceiveData?(session, dataTask, data)的内容如下:如果dataTaskDidReceiveData不是nil,则调用dataTaskDidReceiveData,否则什么都不做。