2016-04-25 1 views
0

У меня есть массив объектов, где свойство является датой типа NSDate. Массив включает будущие дни и прошлые дни.Получить элементы из массива, где дата сегодня

Я хочу получить массив элементов из этого массива, который включает только даты, которые находятся сегодня, а не последние 24 часа.

Я заказал элементы по убыванию (от нового к старому):

allDashboards.sortInPlace({ $0.date!.compare($1.date!) == NSComparisonResult.OrderedDescending 

Я пытался сделать цикл, проверьте дату вчера и сократить массив, но он не работает как это не может быть ни один элемент с датой вчерашней:

for dash in allDashboards { 

     if (NSCalendar.currentCalendar().isDateInYesterday(dash.date!)) { 
      print(i) 
      allDashboards.removeRange(Range.init(start: 0, end: i)) 
      break 
     } 

     i += 1 
    } 

есть ли способ, чтобы увидеть, если дата миновала день вместо того, если дата является частью этого дня?

ответ

1

Однострочник:

let todayDashboards = allDashboards.filter { NSCalendar.currentCalendar().isDateInToday($0.date!) } 
0

Вы можете использовать NSDateComponents, чтобы создать даты, которые представляют начало и конец допустимого диапазона. Это может быть все, что вы хотите.

Как только у вас появятся эти даты, вы можете создать NSPredicate, который соответствует датам > стартом и < окончаниями. Это создаст фильтр для вас.

Вы можете использовать isDateInToday, чтобы отфильтровать содержимое.

То, что вы не должны делать, - это итерация массива и его мутация в одно и то же время, что и ваш текущий код с allDashboards.removeRange внутри цикла for.

0

Вы можете фильтровать все даты, которые сегодня с функцией filter и isDateInToday из NSCalendar

let filteredDashboards = allDashboards.filter{ NSCalendar.currentCalendar().isDateInToday($0.date!) }