【问题标题】:How can I avoide Forced unwarapping in this?我怎样才能避免强制展开呢?
【发布时间】:2018-09-13 14:18:08
【问题描述】:

如何避免在下面的代码中强制展开?

 self.array = self.array.sorted(by: { Date(timeIntervalSince1970: ($0?.event?.dateRecorded)!) > Date(timeIntervalSince1970: ($1?.event?.dateRecorded)!) })

【问题讨论】:

  • 那是真正的代码吗?为什么$0 是可选的?为什么是$0?.event$1?.bgEvent
  • 是的,它是可选的。它是一个真实的代码
  • 从timestamp(?)到Date的转换真的需要比较吗?
  • @MartinR, array: [T?]
  • @user28434:你是对的!

标签: swift forced-unwrapping


【解决方案1】:

使用 nil-coalescing 将 nil 时间戳替换为一些默认值, 例如远在过去的时间戳:

let past = -TimeInterval.greatestFiniteMagnitude
self.array.sort(by: { 
     $0.event?.dateRecorded ?? past > $1.event?.dateRecorded ?? past
})

如上所述,不需要比较时间戳 Date 值,数字时间戳可以直接比较。

【讨论】:

  • 如果array的排序结果被分配回原始变量,那么使用sort会更容易。 IIRC 它的内存效率更高。
猜你喜欢
  • 2022-12-08
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多