iphone: как смешивать enum как NSCalendar - PullRequest
0 голосов
/ 11 августа 2010

Я только что посмотрел код в NSCalendar.h так:

enum {
    NSEraCalendarUnit = kCFCalendarUnitEra,
    NSYearCalendarUnit = kCFCalendarUnitYear,
    NSMonthCalendarUnit = kCFCalendarUnitMonth,
    NSDayCalendarUnit = kCFCalendarUnitDay,
    NSHourCalendarUnit = kCFCalendarUnitHour,
    NSMinuteCalendarUnit = kCFCalendarUnitMinute,
    NSSecondCalendarUnit = kCFCalendarUnitSecond,
    NSWeekCalendarUnit = kCFCalendarUnitWeek,
    NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,
    NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal,
};
typedef NSUInteger NSCalendarUnit;

А в коде клиента я могу назвать что-то вроде:

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *dateComponents = [calendar components:unitFlags
                                                   fromDate:self
                                                     toDate:[NSDate date]
                                                    options:0];

Я не совсем понимаю, как работает этот код.

Как они могут определить анонимное перечисление, а затем определить тип NSCalendarUnit, который будет NSUInteger. И как они могут связать между NSCalendarUnit и анонимным перечислением.

А в клиентском коде я могу сделать OR operation с NSUInteger, затем как они (NSCalendar) разбирают его, чтобы узнать, какие элементы мне нужно вернуть мне?

1 Ответ

1 голос
/ 11 августа 2010

Они извлекаются с помощью оператора &. Это называется битовым полем, и в Википедии есть хорошая статья о том, как они работают: http://en.wikipedia.org/wiki/Bit_field

Я также недавно ответил на вопрос о том, как работают побитовые операторы: https://stackoverflow.com/questions/3427585#3427633

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...