代码之家  ›  专栏  ›  技术社区  ›  vodkhang

iphone:如何像NSCalendar一样混合enum

  •  0
  • vodkhang  · 技术社区  · 15 年前

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

    在客户端代码中,我可以 OR operation 对于NSUInteger,那么他们(NSCalendar)如何解析它来知道我需要什么样的元素才能将它返回给我?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

    他们是用 & http://en.wikipedia.org/wiki/Bit_field

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