我只是看了一下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)如何解析它以了解我需要将哪些元素交还给我?
答案 0 :(得分:1)
他们是使用&
运算符撤出的。这被称为位域,维基百科有一篇关于它们如何工作的文章:http://en.wikipedia.org/wiki/Bit_field
我最近还回答了关于按位运算符如何工作的问题:https://stackoverflow.com/questions/3427585#3427633