在如下面的结构初始化中使用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
}
// ...
}
}
答案 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
}()
}