方法如下:
let week = DateFormatter().weekdaySymbols!
print(week) //["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
这样,日期名称和一周的第一天将根据当前的区域设置和系统设置自动设置。例如:
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "fr-FR")
let week = formatter.weekdaySymbols!
print(week) //["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
对一组日期名称进行排序:
let week = DateFormatter().weekdaySymbols!
var daysOfWeek: [String] = ["Tuesday", "Thursday" , "Sunday", "Friday"]
daysOfWeek.sort { week.firstIndex(of: $0)! < week.firstIndex(of: $1)!}
print(daysOfWeek) //["Sunday", "Tuesday", "Thursday", "Friday"]
为了简洁起见,我在这里强制展开。您可以使用以下方法检查 daysOfWeek 中的所有字符串是否有效:
var daysOfWeek: [String] = ["Tuesday", "Thursday" , "Sunday", "Friday"]
let week = DateFormatter().weekdaySymbols!
guard Set(daysOfWeek).isSubset(of: week) else {
fatalError("The elements of the array must all be day names with the first letter capitalized")
}
如 Mr Duncan 所建议的那样,为了使上述解决方案更快,这里有一种替代方法:
let week = DateFormatter().weekdaySymbols!
var dayDictionary: [String: Int] = [:]
for i in 0...6 {
dayDictionary[week[i]] = i
}
var daysOfWeek: [String] = ["Tuesday", "Thursday" , "Sunday", "Friday"]
daysOfWeek.sort { (dayDictionary[$0] ?? 7) < (dayDictionary[$1] ?? 7)}
print(daysOfWeek) //["Sunday", "Tuesday", "Thursday", "Friday"]
使用字符串作为日期名称标识符容易出错。更安全的方法是使用枚举:
enum WeekDay: String {
case first = "Sunday"
case second = "Monday"
case third = "Tuesday"
case fourth = "Wednesday"
case fifth = "Thursday"
case sixth = "Friday"
case seventh = "Saturday"
}
let week: [WeekDay] = [.first, .second, .third, .fourth, .fifth, .sixth, .seventh]
var dayDictionary: [WeekDay : Int] = [:]
for i in 0...6 {
dayDictionary[week[i]] = i
}
var daysOfWeek: [WeekDay] = [.third, .fifth , .first, .sixth]
daysOfWeek.sort { (dayDictionary[$0] ?? 7) < (dayDictionary[$1] ?? 7)}
print(daysOfWeek.map {$0.rawValue}) //["Sunday", "Tuesday", "Thursday", "Friday"]