Я смог понять это. Вот мой путь в Objective-C, который, я уверен, может быть легко адаптирован для быстрой работы.
На самом деле у меня есть массив пользовательских объектов, каждый из которых имеет свойство NSDate
, которое мне нужно фильтровать по дням недели.
Я достиг своего решения, добавив еще один пользовательский геттер для моего пользовательского объекта:
Интерфейс:
@property (nonatomic, retain, getter = dayOfWeek) NSString *dayOfWeek;
Реализация:
-(NSString*)dayOfWeek{
return [[(AppDelegate*)[[UIApplication sharedApplication] delegate] dayOfWeekFormatter] stringFromDate:self.createdAt];
}
dayOfWeekFormatter
- это NSDateFormatter, который я создаю в своем AppDelegate, который можно повторно использовать вместо его повторного создания каждый раз:
@property (strong, nonatomic) NSDateFormatter *dayOfWeekFormatter;
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
self.dayOfWeekFormatter = [NSDateFormatter new];
[self.dayOfWeekFormatter setDateFormat:@"eeee"];
[self.dayOfWeekFormatter setLocale:locale];
Вы должны установить локаль!
Теперь я могу использовать этот предикат для фильтрации в любой день, который мне нужен. Вот пример для фильтрации всех объектов в среду:
NSArray *dayArray = [myTestArrayOfObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"dayOfWeek == 'Wednesday'"]];