Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 日期总是在同一时间返回_Swift_Date - Fatal编程技术网

Swift 日期总是在同一时间返回

Swift 日期总是在同一时间返回,swift,date,Swift,Date,我在String上设置了一个扩展名,以相同的格式返回当前日期,以便在代码中的任何地方都可以调用它,并使用相同的格式,从而保证一致性。我的代码是 extension String { static let dateString = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short) } 唯一的问题是,当我调用它时,会返回相同的确切时间,直到应用程序被终止。如果我使用的是Date

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

extension String {
    static let dateString = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)
}
唯一的问题是,当我调用它时,会返回相同的确切时间,直到应用程序被终止。如果我使用的是
Date()
,那么每次都应该使用一个新值,对吗?为什么不是这样?

一个(静态)存储的属性在第一次访问时被初始化一次。在“Swift编程语言”中进行比较:

存储的类型属性在第一次访问时被延迟初始化。即使被多个线程同时访问,它们也保证只初始化一次,并且不需要用惰性修饰符标记它们

您需要的是计算属性:

备注:正如Leo Dabus所说,它作为
Date
的实例属性更有意义。以下是一个例子:


创建只被调用一次,这就是问题的原因。这可能会有所帮助,因为它是
静态的
…?IMO字符串应该从属性名称中省略,并且作为
日期
上的实例属性扩展更有意义。
extension String {
    static var dateString: String {
        return DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)
    }
}
extension Date {
    func localString(dateStyle: DateFormatter.Style = .medium, timeStyle: DateFormatter.Style = .medium) -> String {
        return DateFormatter.localizedString(from: self, dateStyle: dateStyle, timeStyle: timeStyle)
    }
}