【问题标题】:iphone: How to mix enum like NSCalendariphone:如何像 NSCalendar 一样混合枚举
【发布时间】:2010-08-11 03:02:56
【问题描述】:

我只是这样查看 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)如何解析它以了解我需要将哪些类型的元素返回给我?

【问题讨论】:

    标签: iphone c objective-c enums calendar


    【解决方案1】:

    它们是使用& 运算符拉出的。这称为位域,维基百科有一篇关于它们如何工作的 OK 文章:http://en.wikipedia.org/wiki/Bit_field

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

    【讨论】:

    • int MagicMap = 1; int 魔杖 = 2; int MagicHat = 4;关于位掩码的这段代码,它是否需要为 2^n,因为我只是想知道为什么 int MagicHat = 4 而不是 3?是因为'(1 | 2) = 3'
    • 然后你怎么能定义匿名枚举像 enum {}; typedef NSUInteger NSCalendarUnit; ?
    • @vodkhang 是的,这些值必须是 2 的幂,正如您正确理解的那样。 typedef 只是为了语义清晰,实际上并没有影响任何东西。只是帮助程序员意识到值的目的是什么。在这种情况下,NSCalendarUnitNSUInteger 更有意义。
    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2012-07-03
    相关资源
    最近更新 更多