我有一个包含许多值的数组
每个值都包含dateAdd(不是nil)
我有一个func
,在这里对数组进行如下排序:
func sortByDate(array: [TransactionValues]) -> [TransactionValues] {
print(array)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let sortedArray = array.sorted { dateFormatter.date(from: $0.dateAdd)! < dateFormatter.date(from: $1.dateAdd)! }
print(sortedArray)
return sortedArray
}
但是失败并显示错误:
致命错误:解开可选值时意外发现nil
$ 0.dateAdd不为$ 1.dateAdd
任何帮助将不胜感激。
答案 0 :(得分:2)
问题是解析日期字符串时使用的日期格式错误。 "2019-02-09 03:57:22.837371"
的日期格式应为"yyyy-MM-dd HH:mm:ss.SSSSSS"
,而不是"yyyy-MM-dd HH:mm:ss"
。而且,在解析固定日期格式字符串时,请不要忘记始终将日期格式设置区域设置为en_US_POSIX
:
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSSSS"
请注意,ISO8601字符串的创建方式也可以进行排序,而无需将其转换为日期:
let sortedArray = array.sorted { $0.dateAdd < $1.dateAdd }