如何在从 API iOS 获取时间后显示实时时钟时间

How to display real clock time after fetching time from API iOS

我已经开始学习 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 class' 初始化程序 Date()。这会为您提供当前日期,并且可以在时间变化时轻松更新时间。您可以创建一个重复的 Timer 每秒触发一次并更新时间显示

如果您想使用 API 中的当前时间,然后每秒更新该日期,则必须进行一些数学运算来计算更新后的时间。 (我不建议每秒查询 API。这将使 iOS 设备的无线电持续保持全功率,快速耗尽电池。)

您需要做一些数学运算来计算 API 呼叫自 1970 年以来的秒数与内部时钟自 1970 年以来的时间间隔之间的差异,保存该偏移量,并使用它来调整您的时间从调用 Date() 中获取。 (请参阅 Date class' 初始化器 init(timeIntervalSinceNow:),它可用于获取日期,但要应用调整。