如何在结构中存储静态DateFormatter?

Fre*_*uid 1 swift

DateFormatter如下面的结构的初始化中使用a 时,缓存该格式化程序的最简洁方法是什么?

struct Entry {
    let date: Date
    // ...

    init?(string: String) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
        if let date = dateFormatter.date(from: string) {
            self.date = date
        } else {
            return nil
        }
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 6

只需将其分配给一个属性:

struct Entry {
    let dateFormatter: DateFormatter
    // ...

    init?(string: String) {
        let df = DateFormatter()
        df.dateFormat = "yyyy-MM-dd hh:mm:ss"
        dateFormatter = df
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,由于日期格式化程序的创建成本有些高,因此将这些作为静态属性非常常见,因此对于每个实例,只有一个类型而不是一个类型.

struct Entry {
    private static let dateFormatter: DateFormatter = {
        let df = DateFormatter()
        df.dateFormat = "yyyy-MM-dd hh:mm:ss"
        return df
    }()
 }
Run Code Online (Sandbox Code Playgroud)