URLSessionDelegate函数未被调用

我想在处理数据时处理数据,所以我已经开始像这样对URL会话进行了充实:

let session = URLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: operationQueue); 

我还将类设置为URLSessionDataDelegate:

 class ViewController: UITableViewController, URLSessionDataDelegate{ 

最后,我实现了didReceive数据函数,如下所示:

 func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data){ print(data) } 

但是,该函数永远不会被调用。

我像这样运行我的会话:

 let session1 = session.dataTask(with: url) { (data, response, error) in print(data!); } 

它打印来自回调的数据,但不打印来自委托的数据。 任何帮助是极大的赞赏。

编辑:我还添加了以下内容:

 func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void){ completionHandler(URLSession.ResponseDisposition.allow); } 

但是,委托方法仍未被调用。

这不起作用的原因是您使用完成处理程序创建数据任务。 相反,您必须使用dataTask(with:)函数。

我在文档中也错过了这个,并花了几个小时想知道为什么我的委托方法没有被调用。

来自文档:

通过使用完成处理程序,任务绕过调用委托方法进行响应和数据传递,而是在完成处理程序内提供任何生成的NSData,URLResponse和NSError对象。 但是,仍然会调用用于处理身份validation挑战的委托方法。