Как я могу улучшить этот код метода "DateFromNextWeekDay: FromDate"? - PullRequest
1 голос
/ 21 марта 2011

Буду рад услышать предложения о том, как улучшить / сократить этот метод.Короче говоря, необходимо:

  • Найти следующую дату, для которой день недели (например, ср.) Соответствует тому, что передается в метод.
  • Например, следующий WED от данной даты (и включая данную дату)

Код ниже:

- (NSDate*)DateFromNextWeekDay:(NSInteger)weekDay FromDate:(NSDate*)fromDate {
    // Returns the next week day, as specified by "weekDay", from the specified "fromDate" 
    NSDate *fromDateMidday = [[NSDate date] dateBySettingHour:12 andMinute:0];
    NSDate *dateCounter  = [[fromDateMidday copy] dateByAddingTimeInterval:-86400];     // Take 1 day away, which will get incremented in the loop
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSInteger day;
    do{
        dateCounter  = [dateCounter dateByAddingTimeInterval:86400];
        unsigned units = NSWeekdayCalendarUnit;
        NSDateComponents *components = [gregorian components:units fromDate:dateCounter];
        day = [components weekday];
    } while(day != weekDay);
    [gregorian release];
    return dateCounter;
}

спасибо

1 Ответ

3 голосов
/ 21 марта 2011

Вы можете просто найти день недели переданной даты, вычесть ее из целевого дня недели и, наконец, добавить этот результат к переданной дате. Нет необходимости циклически перебирать даты. Так было бы:

daysToAdd = (targetDayOfWeek - currentDayDayOfWeek)% 7

Причиной моделирования вычитания является обработка случаев, когда целевой день меньше текущего дня (это суббота, и вы ищете вторник, например).

...