想象一下,如果有一个像var dates = [Date1, Date2, Date3]
这样的日期数组。我怎样才能获得这三个日期中最早的一个?我尝试了几种在网上找到的方法,但都没有正常工作。
......并且:如果我有一个自定义类的数组'提醒'我将如何做到这一点?使用属性.fireDate,这意味着:如何使用最早的.fireDate属性获取对象?
对不起,我无法发布任何示例代码,我会通过手机发布此代码; - )
答案 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
}