假设您有一个全局的日期格式化程序
let df:DateFormatter = DateFormatter()
理想情况下,在同一个全局初始化时间进行.dateFormat
设置会很好 - 有点像这样
let df:DateFormatter = DateFormatter().dateFormat = "yyyy-MM-dd"
但DateFormatter没有替代初始化(这里没有DateFormatter(withDateFormat: "yyyy-MM-dd")
真的,有一个Swift解决方案吗?是否存在任何类之外的代码块的语法,它在任何类型之前运行,并且您可以在其中设置这种性质的东西?
(注意 - 我完全了解替代方法,例如单身,扩展等:这是一个Swift结构问题,谢谢。)
答案 0 :(得分:5)
使用闭包进行设置
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
但是不鼓励您使用未封装的全局变量。
答案 1 :(得分:0)
您可以在扩展程序中自由实现便捷初始化程序,如下所示:
extension DateFormatter {
convenience init(dateFormat: String) {
self.init()
self.dateFormat = dateFormat
}
}
用法:
let dateFormatter = DateFormatter(dateFormat: "yyyy-MM-dd")
dateFormatter.date(from: "2017-02-22")
答案 2 :(得分:-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")
}
}