(Swift 3)如何在Swift 3中按日期对类对象数组进行排序?

11
我有一个包含成员类型为Date的对象数组,我想通过Date对整个数组进行排序,但它并没有正确排序。这是我正在使用的代码,数组的名称为alarms,成员类型为 Date 的名称为time
alarms.sort(by: { $0.time.compare($1.time) == .orderedAscending })

每当我对它进行排序时,它总是不能正确工作,我通过在for循环中打印所有值来测试它。

有人可以帮我解决这个问题吗?


Date 没有 time 属性。这是从哪里来的? - Tom Harrington
@TomHarrington - 我认为time是他的闹钟类型中Date属性的名称。 - Rob
self.messages.sort(by: { $0.date.compare($1.date) == .orderedAscending })对我有效。 - Satish Babariya
1个回答

20

compare 是一个 NSDate 的函数。使用 Date 时,您可以直接使用 < 运算符。例如:

compare 是一個 NSDate 函數。在使用 Date 時,您可以直接使用 < 運算子。例如:

alarms.sort { $0.time < $1.time }

话虽如此,compare 也应该可以工作。我怀疑这里可能存在一些更深层次的问题,也许你的 time 值有不同的日期。你可能只看到了时间部分,但是在比较 Date 对象时,它会考虑日期和时间。如果你只想查看时间部分,有几种方法可以做到这一点,例如查看 time 和当天开始之间的时间间隔:

let calendar = Calendar.current

alarms.sort {
    let elapsed0 = $0.time.timeIntervalSince(calendar.startOfDay(for: $0.time))
    let elapsed1 = $1.time.timeIntervalSince(calendar.startOfDay(for: $1.time))
    return elapsed0 < elapsed1
}

有很多方法可以做到这一点,但希望这能说明这个想法。


我认为它们有不同的日期!感谢你的建议,Rob。我会尝试一下并告诉你结果。 - Jolaroux
我在使用 Calendar.startOfDay 部分时遇到了错误,这是我得到的错误信息:在类型 'Calendar' 上使用实例成员 'startOfDay';您是否意味着要改用类型 'Calendar' 的值? - Jolaroux
谢谢,运行得非常完美。同样的标题数组按照开始日期降序排序:sameTitleArr.sort { $0.startDate > $1.startDate }。 - Rajath Kornaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接