iphone:如何混合像NSCalendar枚举

我只看了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和匿名枚举。

在客户端代码中,我可以使用NSUInteger执行OR operation ,然后他们(NSCalendar)如何解析它以知道需要将哪些元素还给我?


&运算符将它们拉出来。 这被称为位域,维基百科有关它们如何工作的好文章:http://en.wikipedia.org/wiki/Bit_field

我最近还回答了一个关于如何按位运算符工作的问题:https://stackoverflow.com/questions/3427585#3427633

链接地址: http://www.djcxy.com/p/72659.html

上一篇: iphone: How to mix enum like NSCalendar

下一篇: Dynamically appending a variable property name