我有一个自定义对象,其属性类型为Double。它使用Date().timeIntervalSince9170初始化

Class MyObject {
    dateAdded: Double?
}

let myObject1 = MyObject()
myObject1.dateAdded = Date().timeIntervalSince1970

//myObjec2 and more myObjects get initialized and everything added to the array below

var arr = [MyObject]()
arr.append(myObject1)
arr.append(myObject2)
arr.append...

我后来有了一个不同的数组,它用上面数组中的所有对象初始化,我想按添加的日期排序,这样我就可以map每个对象
var diffArr = [MyObject]()
diffArr.map { Date(timeIntervalSince1970: $0.dateAdded!)}

映射后如何对diffArr进行排序?
我通常会这样做,但compareDouble不起作用
diffArr.sort { (d1, d2) -> Bool in
    return d1.dateAdded?.compare(d2.dateAdded) == .orderedDescending
}

我看了其他的问答,但我找不到任何一个能同时使用日期的问题

最佳答案

DatesComparable,因此您可以使用

diffArr.sort { return $0.dateAdded ?? 0.0 < $1.dateAdded ?? 0.0 }

(原力解开的咒语很糟糕。是否可以更改结构以便dateAdded属性不是可选的?)
在我的代码中,我编写了将nil日期值映射为0的比较,因此具有nil日期的MyObject实例将具有非常早的日期。

10-08 09:04