swift 获取日期最近的对象

mkshixfv  于 2023-02-21  发布在  Swift
关注(0)|答案(3)|浏览(109)

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

class Thing: NSObject {
    var data: String
    var type: String
   var created: NSDate
}

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

public func getLastSwipe(list: Array<Thing>) -> Thing {
    return someThing
}
bz4sfanl

bz4sfanl1#

另一种方法是使用Swift的.max,如下所示:
dates.max(by: <)
以下是我以前的回答,更新于2023年2月。

let mostRecentDate = dates.max(by: {
   $0.timeIntervalSinceReferenceDate < $1.timeIntervalSinceReferenceDate
})

这是我找到的性能最好的解决方案。
如果序列不为空,则返回序列的最近日期;否则为零。

w1jd8yoj

w1jd8yoj2#

如果你愿意的话,你可以使用reduce,它会找到时间戳最大的对象。

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

如果你的日期不全是过去的,你还需要与当前日期进行比较,以确定截止日期;如果你的日期全是未来的,你需要将>切换到<,以找到下一个未来日期(最小时间戳)。

4sup72z8

4sup72z83#

您可以对数组进行排序,然后查找第一个/最后一个元素。例如...

let objects: [Thing] = ... //Set the array
let mostResent = array.sorted { (firstThing, secondThing) -> Bool in
    firstThing.created.timeIntervalSince1970 > secondThing.created.timeIntervalSince1970
}.first

这将返回最近的Thing作为可选值(因为不能保证数组不为空。如果您知道数组不为空,则可以以.first!结束该行

相关问题