在初始化时设置日期格式化程序(例如)?

时间:2017-02-22 13:43:44

标签: swift

假设您有一个全局的日期格式化程序

let df:DateFormatter = DateFormatter()

理想情况下,在同一个全局初始化时间进行.dateFormat设置会很好 - 有点像这样

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

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

真的,有一个Swift解决方案吗?是否存在任何类之外的代码块的语法,它在任何类型之前运行,并且您可以在其中设置这种性质的东西?

(注意 - 我完全了解替代方法,例如单身,扩展等:这是一个Swift结构问题,谢谢。)

3 个答案:

答案 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")
    }

}