我知道在 iOS/Swift 中创建 DateFormatters 和设置 .dateFormats 是很昂贵的,我已经在 SO 和博客中阅读了很多不同的观点,但我仍然不确定有效处理DateFormatter
和.dateFormat
. 具体来说,我正在使用一个大致模仿苹果 iPhone 天气应用程序 UI 的应用程序。timeIntervalSince1970
日期通过 API 以/Unix 格式到达。在每个视图控制器上,我将使用一个.dateFormat
用于当前天气,例如“EEEE,MMM dd,y”,另一个用于在每日天气表视图中的 7 个单元格中格式化日期,例如“EEEE”,另一个用于水平滚动集合视图中 24 个单元格中的小时,例如“哈”。用户还为他们保存的每个位置翻阅各种视图控制器。我没有注意到对性能的影响很大,但我真的很想确保我是最有效率的,并且正确地考虑了这一点(例如单例是要走的路吗?)。
我创建了一个单例DateFormatter
作为静态变量,还创建了一个函数来设置日期格式化程序的.dateFormat
和(见下文)。.timeZone
根据之前的阅读,我假设如果我坚持使用 iOS 10 或更高版本,我不必担心线程安全性,而且无论如何在这类应用程序中它可能不是问题。
class Formatter {
static var dateFormatter = DateFormatter()
private init() {}
static func formatTimeForTimeZone(unixDate: TimeInterval, formatString: String, timeZone: String) -> String {
let usableDate = Date(timeIntervalSince1970: unixDate)
self.dateFormatter.dateFormat = formatString
self.dateFormatter.timeZone = TimeZone(identifier: timeZone)
let dateString = self.dateFormatter.string(from: usableDate)
return dateString
}
}
每次我需要在视图或自定义单元格类中设置日期时,我只需调用该函数,传入适当的值,如下所示:
let dateString = Formatter.formatTimeForTimeZone(unixDate: someTime, formatString: someFormatString, timeZone: someTimeZone)
由于我在每次调用(在每个单元格中)设置一个 .formatString ,这种方法并没有为我节省太多,这是否正确?如果是这样,是否有更合理的方法?高级感谢您让我直截了当。