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

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

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

您的计算尝试

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
。但是,如果您打算将此开始时间保存在永久性存储中,您可能会在以后某个日期重新启动该应用程序时想起该时间,那么您必须使用
Date
CFAbsoluteTimeGetCurrent
,并且要避免可能出现的任何不准确之处。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5642222.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存