想象一下如果有这么多的日期。那三次约会中最早的一次怎么办?我试过几种在网上找到的方法,但都不管用。
…和:如果我有一个带有属性fireDate的自定义类'reminder'数组,我将如何做到这一点,在这种情况下,这意味着:我如何获取具有最早的.fireDate属性的对象?
很抱歉,我不能发布任何示例代码,我是通过手机发布的;-)
最佳答案
Date
符合Comparable
协议,这意味着您可以将它们与<
、==
和>
进行比较。所以你可以在数组中使用min()
来查找最早的。
let dates = [date1, date2, date3]
if let earliest = dates.min() {
// use earliest date
}
如果有一个
Reminder
s数组具有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
}