日期总是在同一时间返回

时间:2018-09-26 13:47:55

标签: swift date

我在String上设置了扩展名,以相同的格式返回当前日期,以便可以在代码中的任何地方调用它,并使用相同的格式,以实现一致性。我的代码是

extension String {
    static let dateString = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)
}

唯一的问题是,当我调用它时,将返回相同的确切时间,直到该应用程序被杀死为止。如果我使用的是Date(),那么每次都应该使用一个新值,对吧?为什么不是这种情况?

1 个答案:

答案 0 :(得分:6)

(静态)存储的属性仅初始化一次(第一次访问)。比较“ The Swift Programming Language”中的Properties

  

存储的类型属性在第一次访问时被延迟初始化。保证它们只能被初始化一次,即使同时被多个线程访问也不需要初始化。

您想要的是一个计算属性:

extension String {
    static var dateString: String {
        return DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)
    }
}

备注:如Leo Dabus所说,作为Date的实例属性更有意义。以下是取自NSDate() or Date() shows the wrong time的示例:

extension Date {
    func localString(dateStyle: DateFormatter.Style = .medium, timeStyle: DateFormatter.Style = .medium) -> String {
        return DateFormatter.localizedString(from: self, dateStyle: dateStyle, timeStyle: timeStyle)
    }
}