当前位置: 首页 > 面试题库 >

使用Swift查找NSDate之间的秒数差异(整数)

杨乐意
2023-03-14
问题内容

我正在编写一段代码,我想在其中计时按下按钮的时间。为此,我记录了NSDate()按下按钮时的记录,并尝试timeIntervalSinceDate在释放按钮时使用该功能。这似乎可行,但是我找不到任何方法来打印结果或将其切换为整数。

var timeAtPress = NSDate()

@IBAction func pressed(sender: AnyObject) {
    println("pressed")
    timeAtPress = NSDate()
}

@IBAction func released(sender: AnyObject) {
    println("released")
    var elapsedTime = NSDate.timeIntervalSinceDate(timeAtPress)
    duration = ???
}

我已经看到了一些类似的问题,但是我不知道C,所以我很难理解给出的答案。如果有一种更有效的方法来找出按下按钮的时间,我可以提出建议。提前致谢。


问题答案:

您的计算尝试elapsedTime不正确。在Swift 3中,它将是:

let elapsed = Date().timeIntervalSince(timeAtPress)

请注意参考()之后的内容Date。该Date()实例化一个新的日期对象,然后timeIntervalSince返回和之间的时间差timeAtPress。这将返回一个浮点值(技术上为a
TimeInterval)。

如果您希望将其截断为一个Int值,则可以使用:

let duration = Int(elapsed)

而且,顺便说一句,您对timeAtPress变量的定义不需要实例化Date对象。我想你打算:

var timeAtPress: Date!

它将变量定义为一个Date变量(一个隐式解开的变量),但是您可能会将该变量的实际实例推迟到pressed被调用之前。

另外,我经常使用CFAbsoluteTimeGetCurrent(),例如

var start: CFAbsoluteTime!

当我要设置时startTime,请执行以下操作:

start = CFAbsoluteTimeGetCurrent()

当我想计算经过的秒数时,请执行以下操作:

let elapsed = CFAbsoluteTimeGetCurrent() - start

值得注意的是CFAbsoluteTimeGetCurrent文档警告我们:

重复调用此函数不能保证单调递增的结果。系统时间可能由于与外部时间参考同步或由于用户明确更改时钟而减少。

这意味着,如果在进行这些调整之一时,如果您不足以测量经过时间,则最终可能会得出错误的经过时间计算结果。对于NSDate/
Date计算也是如此。使用mach_absolute_time基于计算的最安全的方法(最容易通过进行CACurrentMediaTime):

let start = CACurrentMediaTime()

let elapsed = CACurrentMediaTime() - start

这使用mach_absolute_time但避免了技术问答QA1398中概述的某些复杂性。

但是请记住,重新启动设备后,CACurrentMediaTime/
mach_absolute_time将会重置。因此,最重要的是,如果您在运行应用程序时需要准确的经过时间计算,请使用CACurrentMediaTime。但是,如果您打算将此开始时间保存在永久性存储中,您可能会在以后某个日期重新启动该应用程序时想起该时间,那么您必须使用DateCFAbsoluteTimeGetCurrent,并且要避免可能出现的任何不准确之处。



 类似资料:
  • 我被困在java之间。时间世俗的ChronoUnit和java。时间世俗的暂时的直到。它们是如何工作的??

  • 假设A有两个日期(开始时间) 例如。 感谢帮助。

  • 我有两个数据帧df1和df2,其中df2是df1的子集。我如何获得一个新的数据帧(df3),它是两个数据帧之间的差值? 换句话说,一个数据帧,它包含了df1中所有的行/列,而不是DF2中的行/列?

  • 这两者有什么区别?基元类型不能有“类”,可以吗?它是基元类型。没有对象具有类。 这两者有什么不同?

  • 问题内容: 给定一个数字列表,人们如何发现第()个元素与其第()个元素之间的差异? 使用表达式还是列表理解更好? 例如: 给定一个列表,我们的目标是要找到一个列表,因为,等等。 问题答案:

  • 我刚开始使用普罗米修斯,我正在尝试理解一些事情。 我有一个Java的web应用程序,它公开了一个叫做“my_counter”的计数器。 下面的查询有什么区别? 如果我在1小时的相同时间间隔内运行这些查询,为什么两个查询返回不同的结果? 我试图实现的是看看计数器在一个可配置的时间段内增加了多少。 多谢了。 附注。我实际上使用Grafana来运行查询并选择时间范围。