0

我正在尝试转换为数组并从名为 Historic 的 coreData 实体中对一些日期进行排序,它正在工作,但我正在使用强制展开对数组进行排序

private var sortedHistoric: [Historic] {
    var aux = Array(medication.dates as? Set<Historic> ?? [])
    aux = aux.sorted(by: { $0.dates!.timeIntervalSinceNow > $1.dates!.timeIntervalSinceNow })
    return aux
}

有没有办法尝试对数组进行排序,如果有错误,只需忽略它并保持未排序,所以我不必使用强制解包?

4

1 回答 1

0

正如 jnpdx 所说,当 Date 字段为 nil 时,您需要决定要做什么。如果将 nil 日期视为 2001 年 1 月 1 日午夜是可以的,您可以像这样重写您的排序:

let nilDateValue = 0
aux = aux.sorted(by: { $0.dates.timeIntervalSinceReferenceDate ?? nilDateValue > $1.dates.timeIntervalSinceReferenceDate ?? nilDateValue })

(这将导致 aux 数组中的所有 nil 日期在自 2001 年 1 月 1 日以来的任何日期之前排序。)

nilDateValue如果您希望将 nil 日期排序到列表的 ned,则可以使用不同的较大值(例如 252423993599,即 9999 年 1 月 31 日的日期) 。

于 2021-07-19T17:29:58.300 回答