2016-09-20 1 views
11

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

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

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

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

+0

'Date' не имеет свойства' time'. Откуда это происходит? –

+0

@TomHarrington - Я думаю, что 'время' - это имя свойства' Date' его типа тревоги. – Rob

+0

Да, спасибо, спасибо! – Jolaroux

ответ

19

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 
} 

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

+0

Я думаю, что у них разные даты! И спасибо за это ограбление, я попробую это и дам вам знать, как это получается. – Jolaroux

+0

Я получаю ошибки с частью Calendar.startOfDay, это ошибка, которую я получаю Использование члена экземпляра 'startOfDay' в типе 'Calendar'; вы имели в виду использовать значение типа «Календарь» вместо этого? – Jolaroux

+0

Теперь он отлично работает! +1 Спасибо :) – Jolaroux

Смежные вопросы