Я пытаюсь следить за сеансом WWDC20. Обновляйте свои сложности, WWDC20-10049. Пытаясь следовать коду, я застрял в функции расписания:
func schedule(_ first: Bool) {
if backgroundTask == nil { //Issue is here
if let url = self.currentWeatherURLForLocation(delegate.currentLocationCoordinate)
{
let bgTask = backgroundURLSession.downloadTask(with: url)
bgTask.earliestBeginDate = Date().addingTimeInterval(first ? 60 : 15*60)
bgTask.countOfBytesClientExpectsToSend = 200
bgTask.countOfBytesClientExpectsToReceive = 1024
bgTask.resume()
backgroundTask = bgTask //Issue is here
}
}
}
}
Проблема, с которой я сталкиваюсь, поскольку сеанс предоставил только фрагменты, заключается в том, где определена var backgroundTask. Эта функция объявлена в модели данных, в данном случае WeatherDataProvider
. Очевидно, что это backgroundURLSession.downloadTask
, но он не идентифицируется как self
, поэтому он должен быть локальным для функции, но не показан во фрагменте кода. Я ожидаю, что он будет либо отправлен в качестве параметра функции, либо объявлен в самой модели данных. Если он объявлен там, как он объявлен, поскольку, согласно разговору, он имеет доступ к предыдущим фоновым запросам, поскольку фрагмент проверяет, есть ли фоновый запрос в очереди, чтобы функция не планировала другой. Я искал последние пару дней, но не могу найти ничего, что бы это реализовало, что я мог бы использовать, чтобы понять, откуда Apple исходит в этом сеансе.
Я проверил этот ответ, как а также этот обзор сеанса, но я этого не понял.
Спасибо.