如何在 Swift UI 中每 24 小时重置一次值?

How can I reset a value every 24 hours in Swift UI?

我试图每 24 小时将一个值设置为 0,无论用户是否打开了该应用程序。我知道我的应用程序不能 运行 在后台设置计时器,所以我怎样才能让该值每 24 小时自动重置一次?

我试过保存我的用户最后一次 运行 应用程序并检查它是否在当前时间的 24 小时内,但如果在 24 小时内则不会重置值。 (此外,当我将 UserDefaults 中的变量保存到 Date() 并打印它时,出于某种原因它会在未来 16 小时内给出时间。)即使我使用 NSDate,我想我仍然会遇到这个问题。

感谢您的阅读,如果有任何想法,我将不胜感激:)

您真的需要在恰好 24 小时内重置您的应用值吗?您是否只想检查自上次重置您的值以来是否已超过 24 小时,并在每次您的应用程序启动时重置它是否已超过 24 小时?如果您不需要在特定时间重置它,那么您可以将以下代码添加到您的应用程序委托

    if UserDefaults.standard.bool(forKey: "didLaunchBefore") == false{
  //only runs the first time your app is launched
            UserDefaults.standard.set(true, forKey: "didLaunchBefore")
  //sets the initial value for tomorrow
            let now = Calendar.current.dateComponents(in: .current, from: Date())
            let tomorrow = DateComponents(year: now.year, month: now.month, day: now.day! + 1, hour: now.hour, minute: now.minute, second: now.second)
            let date = Calendar.current.date(from: tomorrow)
            UserDefaults.standard.set(date, forKey: "tomorrow")
        }
        if UserDefaults.standard.object(forKey: "tomorrow") != nil{//makes sure tomorrow is not nil
            if Date() > UserDefaults.standard.object(forKey: "tomorrow") as! Date {// if todays date is after(greater than) the 24 hour period you set last time you reset your values this will run
  // reseting "tomorrow" to the actual tomorrow
                let now = Calendar.current.dateComponents(in: .current, from: Date())
                let tomorrow = DateComponents(year: now.year, month: now.month, day: now.day! + 1, hour: now.hour, minute: now.minute, second: now.second)
                let date = Calendar.current.date(from: tomorrow)
                UserDefaults.standard.set(date, forKey: "tomorrow")
                //reset your values here
            }
        }

尝试使用 UserDefaults 保存日期:

UserDefaults.standard.set(Date(), forKey:"savedTime")

并检查该值是否必须设置为 0:

if let date = UserDefaults.standard.object(forKey: "savedTime") as? Date {
   if let diff = Calendar.current.dateComponents([.hour], from: date, to: Date()).hour, diff >= 24 {
      //Set value to 0
   }
}