Я только что посмотрел код в 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) разбирают его, чтобы узнать, какие элементы мне нужно вернуть мне?