iphone:如何混合像NSCalendar这样的enum

iphone:如何混合像NSCalendar这样的enum,iphone,c,objective-c,enums,calendar,Iphone,C,Objective C,Enums,Calendar,我刚才查看了NSCalendar.h中的代码,如下所示: enum { NSEraCalendarUnit = kCFCalendarUnitEra, NSYearCalendarUnit = kCFCalendarUnitYear, NSMonthCalendarUnit = kCFCalendarUnitMonth, NSDayCalendarUnit = kCFCalendarUnitDay, NSHourCalendarUnit = kCFCale

我刚才查看了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的类型定义为NSInteger。以及它们如何在NSCalendarUnit和匿名枚举之间进行链接


在客户端代码中,我可以使用NSUInteger执行
或操作
,然后他们(NSCalendar)如何解析它,以知道我需要哪些类型的元素将其返回给我?

使用
&
操作符将其拉出。这称为位域,维基百科有一篇关于它们如何工作的OK文章:


我最近还回答了一个关于位运算符如何工作的问题:

int MagicMap=1;int MagicWand=2;int-MagicHat=4;关于位掩码的这段代码,它是否需要为2^n,因为我只是想知道为什么int MagicHat=4而不是3?是不是因为'(1 | 2)=3',然后如何定义类似enum{}的匿名enum;typedef NSCalendarUnit@vodkhang是的,值必须是2的幂,正如您正确计算的那样。typedef只是为了语义清晰,实际上并不影响任何东西。只是帮助程序员认识到价值的目的是什么<在这种情况下,code>NSCalendarUnit比
NSUInteger
更敏感。