从日期数组中获取最早的日期

时间:2017-05-21 13:13:49

标签: ios arrays swift

想象一下,如果有一个像var dates = [Date1, Date2, Date3]这样的日期数组。我怎样才能获得这三个日期中最早的一个?我尝试了几种在网上找到的方法,但都没有正常工作。

......并且:如果我有一个自定义类的数组'提醒'我将如何做到这一点?使用属性.fireDate,这意味着:如何使用最早的.fireDate属性获取对象?

对不起,我无法发布任何示例代码,我会通过手机发布此代码; - )

1 个答案:

答案 0 :(得分:7)

Date符合Comparable协议,这意味着您可以将其与<==>进行比较。因此,您可以在阵列上使用min()来查找最早的。

let dates = [date1, date2, date3]
if let earliest = dates.min() {
    // use earliest date
}

如果你有一个Reminder的数组有一个fireDate属性,你可以将一个闭包传递给min,它会比较你的两个对象来决定顺序:

let reminders = [reminder1, reminder2, reminder3]
if let earliest = reminders.min(by: { $0.fireDate < $1.fireDate }) {
    // use earliest reminder
}

或者,您可以为Comparable课程添加Reminder一致性,然后您可以像以前一样使用min()

extension Reminder: Comparable {
    static func < (lhs: Reminder, rhs: Reminder) -> Bool {
        return lhs.fireDate < rhs.fireDate
    }

    static func == (lhs: Reminder, rhs: Reminder) -> Bool {
        return lhs.fireDate == rhs.fireDate
    }
}

let reminders = [reminder1, reminder2, reminder3]
if let earliest = reminders.min() {
    // use earliest reminder
}