我已经开始学习Swift和iOS了。为了学习的目的,我用openweathermap API编写了一个天气应用程序。在api响应中,它给出了以Unix UTC时间为单位的时间。我已经在扩展中使用这个函数将时间(Int)转换为字符串-
func fromUnixTimeToTimeNDate() -> String {
let date = Date(timeIntervalSince1970: TimeInterval(self))
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, h:mm:ss a"
if let retData = dateFormatter.string(for: date) {
return retData
}
return ""
}
所以应用程序中的输出看起来像-
现在我想让这个uilabel滴答作响,显示当前的日期和时间,每秒更新一次。我必须为此使用timer()吗?还是有其他解决方案?
通常,您只需要使用系统时钟和date
类的初始化器date()
。这将提供当前日期,并使其在更改时更容易更新。您可以创建一个重复的计时器
,该计时器每秒触发一次并更新时间显示
如果您想使用API中的当前时间,然后每秒更新该日期,那么您将不得不做一些数学来计算更新的时间。(我不建议每秒都查询API,这会让iOS设备的收音机一直处于满电状态,很快耗尽电池。)
您需要进行一些数学运算,计算自1970年以来API调用的秒数与自1970年以来内部时钟的时间间隔之间的差值,保存该偏移量,并使用它调整调用date()
获得的时间。(请参阅date
类'initializerinit(TimeIntervalsInceNow:)
,它可用于获取日期,但要应用调整。