【问题标题】:Try Unwrap or ignore line [duplicate]尝试展开或忽略行[重复]
【发布时间】:2021-09-27 08:10:21
【问题描述】:

我正在尝试转换为数组并从名为 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
}

有没有办法尝试对数组进行排序,如果有错误就忽略它并保持未排序,这样我就不必使用强制展开?

【问题讨论】:

  • 看看medication 会很有帮助。我假设datesDate。由于datesOptional,因此您需要决定如何处理其中一个或两个都为nil 的比较。换句话说,如果$0.datesnil,如果$1.dates 不是nil,它应该是&lt; 还是&gt; 而不是$1.dates
  • 也许题外话了,但您是否考虑过将排序描述符与您的 fetch 请求一起使用?
  • @MartinR 非常感谢,这正是我所需要的

标签: arrays swift forced-unwrapping


【解决方案1】:

正如 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 日以来的任何日期之前。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多