1

我正在尝试关注 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 在本次会议中来自哪里。

我已经检查了这个答案,以及这个会话概述,但我还没有弄清楚。

谢谢。

4

0 回答 0