Сначала добавьте Date
, чтобы было легче извлечь из него часовые и минутные компоненты.
extension Date {
var hour: Int { Calendar.current.component(.hour, from: self) }
var minute: Int { Calendar.current.component(.minute, from: self) }
}
Затем вы можете создать собственную сортировку, как показано в этом сообщении :
array.sort {
if $0.time.date.hour < 6, $1.time.date.hour >= 6 { return false }
if $1.time.date.hour < 6, $0.time.date.hour >= 6 { return true }
return ($0.time.date.hour, $0.time.date.minute) < ($1.time.date.hour, $1.time.date.minute)
}
Тестирование игровой площадки:
let date1 = DateComponents(calendar: .current, year: 2016, month: 12, day: 10, hour: 23, minute: 0).date!
let date2 = DateComponents(calendar: .current, year: 2017, month: 11, day: 5, hour: 3, minute: 0).date!
let date3 = DateComponents(calendar: .current, year: 2018, month: 8, day: 6, hour: 6, minute: 0).date!
let date4 = DateComponents(calendar: .current, year: 2019, month: 9, day: 27, hour: 7, minute: 0).date!
let date5 = DateComponents(calendar: .current, year: 2020, month: 10, day: 30, hour: 2, minute: 0).date!
var dates = [date1,date2,date3,date4,date5]
dates.sort {
if $0.hour < 6, $1.hour >= 6 { return false }
if $1.hour < 6, $0.hour >= 6 { return true }
return ($0.hour,$0.minute) < ($1.hour,$1.minute)
}
dates // "Aug 6, 2018 at 6:00 AM", "Sep 27, 2019 at 7:00 AM", "Dec 10, 2016 at 11:00 PM", "Oct 30, 2020 at 2:00 AM", "Nov 5, 2017 at 3:00 AM"]