在Objective-C手册中解释一行

时间:2015-12-04 18:46:36

标签: objective-c

我查看Apple手册中的下一行,我不理解

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

完整的代码是

NSDate *startDate = ...;
NSDate *endDate = ...;

NSCalendar *gregorian = [[NSCalendar alloc]
                 initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
                                          fromDate:startDate
                                          toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];

什么是|我知道OR运算符的这个章程!

在我的逻辑unitFlags = NSMonthCalendarUnit或NSDayCalendarUnit

1 个答案:

答案 0 :(得分:1)

C和C类/派生语言经常使用称为位域的东西来将各种标志组合传递给函数。某些整数被视为位域,整数中的每个位表示某个标志的布尔值。例如,如果我们有一个1字节的位域,它可能看起来像这样:

10010101

这意味着无论将哪些标志定义为位位置0,2,4,7都设置为true,其他标志设置为false。您通常使用按位运算和预定义常量来构造它,而不是手动构造此位域并记住哪个位是哪个标志。

在您的情况下,NSMonthCalendarUnit定义为01000NSDayCalendarUnit定义为10000。当你将按位OR |)放在一起时,你得到11000,这个位域表示设置了这两个标志。