如何跨不同的源代码文件组织格式化程序
How to Organize Formatters Across Different Source Code Files
是否有 good/neat 方法来组织在不同文件中重复的格式化程序?我发现自己必须为不同的 类 实现相同的代码行。我是否应该将重复的代码放在一个单独的文件中并为其提供全局访问权限?创建一个 class/struct 来保存这些格式化程序是否更好?我可能想多了,但我想学习一个好的方法,并在不同的项目中坚持使用它。
例如,重复的代码如下所示:
let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
您可以扩展 Formatter
class 并将您的日期格式化程序声明为静态属性。这样您就可以在代码中的任何位置访问它们的相同实例。请注意,在向用户显示日期时不应使用固定格式。您应该使用日期和时间样式来根据用户设备区域设置和设置将其本地化显示。顺便说一句,当使用固定日期格式时,您应该将语言环境设置为 "en_US_POSIX":
extension Formatter {
static let mmddyyyy: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
static let shortDate: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
return formatter
}()
static let mediumDate: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium
return formatter
}()
}
Formatter.mmddyyyy.string(from: Date()) // "06/24/2020"
Formatter.shortDate.string(from: Date()) // "6/24/20"
Formatter.mediumDate.string(from: Date()) // "Jun 24, 2020"
是否有 good/neat 方法来组织在不同文件中重复的格式化程序?我发现自己必须为不同的 类 实现相同的代码行。我是否应该将重复的代码放在一个单独的文件中并为其提供全局访问权限?创建一个 class/struct 来保存这些格式化程序是否更好?我可能想多了,但我想学习一个好的方法,并在不同的项目中坚持使用它。
例如,重复的代码如下所示:
let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
您可以扩展 Formatter
class 并将您的日期格式化程序声明为静态属性。这样您就可以在代码中的任何位置访问它们的相同实例。请注意,在向用户显示日期时不应使用固定格式。您应该使用日期和时间样式来根据用户设备区域设置和设置将其本地化显示。顺便说一句,当使用固定日期格式时,您应该将语言环境设置为 "en_US_POSIX":
extension Formatter {
static let mmddyyyy: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
static let shortDate: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
return formatter
}()
static let mediumDate: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium
return formatter
}()
}
Formatter.mmddyyyy.string(from: Date()) // "06/24/2020"
Formatter.shortDate.string(from: Date()) // "6/24/20"
Formatter.mediumDate.string(from: Date()) // "Jun 24, 2020"