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

时间:2018-01-20 16:52:18

标签: swift

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

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
        }
        // ...
    }
}

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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