我瞥了一眼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)//??????
答案 0 :(得分:2)
dataTaskDidReceiveData
被定义为可选闭包。 ?
是可选的链接运算符。所以dataTaskDidReceiveData?(session, dataTask, data)
的内容如下:如果dataTaskDidReceiveData
不是nil,则调用dataTaskDidReceiveData
,否则什么都不做。