所以我的问题是我想从最大到较小的时间戳对chatList进行排序。这工作正常,问题是当最后一条消息为零时。
当为 nil 时,我想将 chatList 的该元素设置为第一个位置并继续排序。
无论如何告诉排序将该元素放在第一个索引中的第一个位置并继续排序。如果没有,那么你们建议我做什么?
var sortedChatList: < Array AbstractChat>{
get{
return (chatList?.sorted(by:{
//here goes the timestamp comparison
if (($0.lastMessage != nil) && ($1.lastMessage != nil)) {
return Double($0.lastMessage!.timeStamp)! > Double($1.lastMessage!.timeStamp)!
}
else{
return true
}
}))!
}
}
您可以使用 nil-coalescing 运算符将 nil
默认为遥远的未来。
下面说明了这个想法:
import Foundation
let foo: [Date?] = [Date(), nil, Date(timeIntervalSinceNow: 100)]
let bar = foo.sorted(by: {
($0 ?? Date.distantFuture) > ($1 ?? Date.distantFuture)
})
bar.forEach({
print("($0)")
})