想象一下如果有这么多的日期。那三次约会中最早的一次怎么办?我试过几种在网上找到的方法,但都不管用。
…和:如果我有一个带有属性fireDate的自定义类'reminder'数组,我将如何做到这一点,在这种情况下,这意味着:我如何获取具有最早的.fireDate属性的对象?
很抱歉,我不能发布任何示例代码,我是通过手机发布的;-)

最佳答案

Date符合Comparable协议,这意味着您可以将它们与<==>进行比较。所以你可以在数组中使用min()来查找最早的。

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

如果有一个Reminders数组具有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
}

10-08 12:53