我有一个包含日期属性作为字符串的文档数组,例如“ 29-10-2020-20:58”,“ 30-10-2020-20:43”,“ 01-11-2020-00:19” ““ 01-11-2020-00:31”
我想将它们从新到旧都做短,该如何实现?
我尝试过
conversations.sort(by: {$0.latestMessage.date > $1.latestMessage.date})
也有类似的问题,但由于我特定的日期字符串格式,没有一个回答我的问题
它可以正常工作,直到月份改变为止,这是另一个问题。如果日期在同一个月,为什么还能工作?我猜想它根本不起作用。
答案 0 :(得分:0)
它适用于同一月中的日期的原因是它在字符串中的第二天之后。我建议将日期属性类型从字符串更改为日期。如果您无法更改属性类型,则需要创建一个自定义DateFormatter来解析您的日期字符串并对结果日期进行排序:
extension Formatter {
static let date: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = .init(identifier: "en_US_POSIX")
formatter.dateFormat = "dd-MM-yyyy-HH:mm"
return formatter
}()
}
extension String {
var customDate: Date? { Formatter.date.date(from: self) }
}
这假定您的日期字符串始终是有效日期:
conversations.sort(by: { $0.latestMessage.date.customDate! > $1.latestMessage.date.customDate!})
print(conversations)
这将打印:
[Conversation(latestMessage:Message(date:“ 01-11-2020-00:31”)),
会话(最新消息:消息(日期:“ 01-11-2020-00:19”))),
会话(最新消息:消息(日期:“ 30-10-2020-20:43”))),
会话(最新消息:消息(日期:“ 29-10-2020-20:58”)))
如果不能保证字符串始终是有效日期,则可以使用nil合并运算符提供默认值:
conversations.sort(by: { $0.latestMessage.date.customDate ?? .distantFuture > $1.latestMessage.date.customDate ?? .distantFuture })
print(conversations)