我正在尝试关注 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
. 它显然是 a backgroundURLSession.downloadTask
,但它没有被标识为self
因此它应该是函数的本地,但它没有显示在代码片段中。我希望它要么作为参数发送给函数,要么在数据模型本身中声明。如果它在那里声明,它是如何声明的,根据谈话,它可以访问先前的后台请求,因为代码片段正在检查队列中是否有后台请求,因此该函数不会安排另一个。我已经搜索了过去几天,但找不到任何实现这一点的东西,我可以用它来了解 Apple 在本次会议中来自哪里。
谢谢。