【问题标题】:Tracking Elapsed Time with Swift使用 Swift 跟踪经过的时间
【发布时间】:2017-04-24 19:35:16
【问题描述】:

所以我是一个任务的倒数计时器,我想知道是否有办法存储已经过去的时间,以便可以将其记录在应用程序中。因此,例如,您使用倒计时计时器时,您会将倒计时运行的时间存储为生命周期值。

  • 倒数计时器设置为 10 分钟
  • 定时器运行 5 分 30 秒,4 分 30 秒 计时器上的剩余秒数。
  • 已存储会话经过时间(5 分 30 秒)的值 在应用程序中并添加到总数中

如果重复这组确切的指令,总生命周期值将是 11 分钟。

如果有人可以向我指出可以解释如何实现此类功能的资源的方向,我们将不胜感激。

【问题讨论】:

  • 您希望它在应用启动时保持不变吗?
  • 您应该考虑当用户后台/杀死应用程序/关闭设备时您的“逻辑时间”是否已经过去。请小心使用计时器,因为它们不保证经过的时间量。用户还可以修改设备时间设置。
  • 嗨,brandonscript,是的,我希望它在应用程序启动时持续存在。

标签: ios swift timer storage


【解决方案1】:

您可以使用多种选项来保存这样的数字 - 绝对最简单和最快的方法可能就是使用 UserDefaults 来存储/检索数字。这并不是UserDefaults 的预期用途,但如果您只是存储一个TimeInterval,它不会给您带来任何问题。

一个简单的实现应该是这样的:

 let interval: TimeInterval = 20 //replace with the time from your countdown timer
 UserDefaults.standard.set(interval, forKey: "totalTimeElapsed")

并且由于您需要将新时间添加到现有的经过时间,您可以执行以下操作:

 let newTimeElapsed: TimeInterval = 20 //replace with time from countdown timer
 let totalSoFar = UserDefaults.standard.double(forKey: "totalTimeElapsed") //will be 0 if it doesn't exist
 UserDefaults.standard.set(newTimeElapsed + totalSoFar, forKey: "totalTimeElapsed")

您可以执行此操作的其他标准方法是 NSKeyedArchiverCore Data,尽管 Core Data 对于坚持 1 个数字来说会是主要的矫枉过正。

【讨论】:

  • 嗯,它不会只是一个实例,这将继续发生在应用程序的所有未来实例中。如果用户没有完成倒计时怎么办?我不想存储计时器总数,只存储实际完成任务所花费的时间
  • @Trlewi 是的,这将在应用程序启动期间持续存在。您需要确定计时器停止时已经过去了多少时间,并在我的示例中使用该数字代替newTimeElapsed。那只是一个占位符。如您所见,在我的示例中,我将新值设置为以前的总计 + 每次的新时间。
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多