获取具有最新日期的对象

Mar*_*arc 3 nsdate ios swift

我有一个类型的对象数组Thing:

class Thing: NSObject {
    var data: String
    var type: String
   var created: NSDate
}
Run Code Online (Sandbox Code Playgroud)

这些东西都有一个名为的NSDate属性created.我的目标是编写一个函数来读取created数组中每个东西的属性并返回具有最新日期的东西.该函数如下所示:

public func getLastSwipe(list: Array<Thing>) -> Thing {
    return someThing
}
Run Code Online (Sandbox Code Playgroud)

Osc*_*and 14

另一种方法是使用 Swift 的.max,就像这样

let mostRecentDate = dates.max(by: {
   $0.timeIntervalSinceReferenceDate < $1.timeIntervalSinceReferenceDate
})
Run Code Online (Sandbox Code Playgroud)

这是我找到的最高效的解决方案。

如果序列不为空,则返回序列的最近日期;否则,无。

  • 我认为这是最干净和最好的解决方案 (3认同)
  • 这应该是最佳答案 (2认同)
  • 干净又简单。它适用于最新的 Swift。 (2认同)

Ian*_*ald 5

reduce如果你愿意,你可以使用.这将找到具有最高时间戳的对象.

var mostRecent = list.reduce(list[0], { $0.created.timeIntervalSince1970 > $1.created.timeIntervalSince1970 ? $0 : $1 } )
Run Code Online (Sandbox Code Playgroud)

如果您的日期不是过去的日期,您还必须与当前日期进行比较以确定截止日期.如果您的日期都在将来,您将需要切换><以查找下一个未来日期(最低时间戳).

  • `reduce`取一个初始值(`list [0]`)和一个块(`{...}`).该块在`list`中的每个元素上执行,其中`$ 0`等于当前(或初始)语句值,$ $ 1等于当前列表项值.该块的结果在下一次迭代时分配给"$ 0",最后在完成时分配给"mostRecent". (2认同)