栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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
,并且要避免可能出现的任何不准确之处。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636363.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号