2017-02-22 109 views
1

假设你有一个日期格式是全球在初始化时设置日期格式化程序(例如)?

let df:DateFormatter = DateFormatter() 

理想情况下是好做的.dateFormat设置在同一个全局初始化时间 - 有点像这个

let df:DateFormatter = DateFormatter().dateFormat = "yyyy-MM-dd" 

但有没有替代方案初始化DateFormatter(有没有这样DateFormatter(withDateFormat: "yyyy-MM-dd")

真的,有没有迅速解决这个?是否有任何类之外的代码块的语法,在任何类之前运行,并且可以在其中设置这种性质的东西?

(注意 - 我完全知道的替代方法,如单身,扩展,等等。这是斯威夫特的结构问题,谢谢大家)

+0

http://stackoverflow.com/a/28347285/2303865 –

+0

注意,最好是使用日期和时间样式(S园艺,中期,长期或全部)将被定位于用户,而不是强迫的日期格式,如果你打算把它显示给用户的。 –

+0

第一个环节究竟说明了什么vadian回答,但里面宣布日期 –

回答

4

使用闭包,使您的设置

let df : DateFormatter = { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd" 
    return formatter 
}() 

不过,您不鼓励使用未封装的全局变量。

+0

辉煌静态!不错... – Fattie

+0

要绝对完全清楚:即关闭将只运行一次(我猜的,从字面上时的iOS启动应用程序)。在使用df时,没有任何情况会再次运行? (我只是做了一些快速测试 - 但我尽管我会问。)谢谢! – Fattie

+0

是的,它运行一次。 – vadian

-1

您可以创建自己的自定义类,像:

class myDateformatter : DateFormatter { 

    override init() { 
     super.init() 
     self.dateFormat = "yyyy-MM-dd" 
     let timeZone = TimeZone(identifier: "UTC") 
     self.timeZone = timeZone 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 
+0

感谢:(注意 - 我完全知道的替代方法,如单身,扩展,等等。这是斯威夫特的结构问题,谢谢大家)从问题 – Fattie

-1

你可以自由地扩展以实现方便的初始化,像这样:

extension DateFormatter { 
    convenience init(dateFormat: String) { 
     self.init() 
     self.dateFormat = dateFormat 
    } 
} 

用法:

let dateFormatter = DateFormatter(dateFormat: "yyyy-MM-dd") 
dateFormatter.date(from: "2017-02-22") 
+0

:(注意 - 我完全知道替代方法,如单例,扩展等:这是一个Swift结构化问题,谢谢。) – Fattie