Нужно ли хранить ссылку на URLSessionTask? - PullRequest
0 голосов
/ 14 мая 2018

Я читал несколько примеров, связанных с URLSession и URLSessionTask, где были показаны фрагменты кода и / или образец проекта был доступен для загрузки. Примеры были о довольно распространенном сценарии запроса некоторой информации к службе REST с использованием URLSessionDataTask, большинство из которых имеют классы, подобные этому:

var defaultSession: URLSession
var dataTask: URLSessionDataTask?

override init() {
   let configuration = URLSessionConfiguration.default
   self.defaultSession = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)

   super.init()
}

func callService(with searchUrl: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
   dataTask = defaultSession.dataTask(with: searchUrl, completionHandler: completion)
   dataTask?.resume()
}

Я считаю, что обычно ссылка на dataTask сохраняется, но она не используется ни в каком другом месте, кроме этой функции. По каким причинам стоит сохранить ссылку на dataTask?

1 Ответ

0 голосов
/ 14 мая 2018

Нет необходимости хранить ссылку на экземпляр URLSessionDataTask, если вы просто хотите выполнить задачу с данными один раз. Вы можете просто сделать defaultSession.dataTask(with: searchUrl, completionHandler: completion).resume()

Однако сохранение ссылки на экземпляр URLSessionDataTask может быть полезно в случае, если вы хотите приостановить или отменить его до того, как он завершит выполнение.

В вашем методе callService также есть опечатка. Входной параметр withUrl нигде не используется, но есть ссылка на searchUrl, который не является входным параметром, поэтому я предполагаю, что вы хотели вызвать входной параметр URL searchUrl.

func callService(with searchUrl: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
   defaultSession.dataTask(with: searchUrl, completionHandler: completion).resume()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...