(Swift 3) Попытка сортировать массив объектов класса по дате в swift 3?

У меня есть массив объектов, у которого есть член, который является типом Date, и я пытаюсь сортировать весь массив Date, и он не сортируется правильно. Это код, который я использую, имя массива alarms, а имя типа элемента Date - time.

alarms.sort(by: { $0.time.compare($1.time) == .orderedAscending })

и всякий раз, когда я его сортирую, он работает неправильно, и я тестирую его, печатая все значения в цикле for.

Может кто-нибудь помочь мне с синтаксисом для этого?

Ответ 1

compare - это функция NSDate. С помощью Date вы можете просто использовать оператор <. Например:

alarms.sort { $0.time < $1.time }

Сказав, что, compare тоже должен работать. Я подозреваю здесь более глубокую проблему, возможно, ваши значения time имеют разные даты. Вы можете смотреть только на часть времени, но при сравнении объектов Date он учитывает как дату, так и время. Если вы хотите посмотреть только часть времени, есть несколько способов сделать это, например, посмотреть временной интервал между time и началом дня:

let calendar = Calendar.current

alarms.sort {
    let elapsed0 = $0.time.timeIntervalSince(calendar.startOfDay(for: $0.time))
    let elapsed1 = $1.time.timeIntervalSince(calendar.startOfDay(for: $1.time))
    return elapsed0 < elapsed1
}

Есть много способов сделать это, но, надеюсь, это иллюстрирует эту идею.