在swift中安排函数执行

时间:2017-08-13 09:51:55

标签: swift dispatch-async

我在Swift中开发一个简单的应用程序,我需要每24小时安排一次函数执行。我知道这个方法:

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
    self.functionToCall()
})

这可以解决我的问题,但这是24小时延迟的正确解决方案吗? 感谢

1 个答案:

答案 0 :(得分:-1)

理论上,这是可能的。 问题是你的应用程序必须在前台运行24小时,这是不太可能发生的。不幸的是,你不能像那样运行后台任务。

解决方案:

让它看起来像函数会在后台执行。每次调用更新函数时,只需将Int(Date().timeIntervalSince1970)保存到UserDefaults。这类似于时间戳,并保存您上次调用更新功能的时间。每次在viewDidLoad() - 函数中(不确定它在Mac应用程序中是否相同,但你可以想象我的意思)调用:

If let timestamp = UserDefaults.standard.integer(forKey: "yourTimestampKey") {

   let currentTimestamp = Date().timeIntervalSince1970
   if (currentTimestamp - timestamp) > 86400 { // number of seconds in 24 hours 
      // the last time your function was updated was at least 24h ago

      update()
   }

}

这就是如何让它看起来像是在后台更新的。我一直在我的应用程序中使用它,它完美无缺。

编辑:

也许,如果应用确实连续24小时运行,我会设置你首先发布的上层功能。