我查看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
答案 0 :(得分:1)
C和C类/派生语言经常使用称为位域的东西来将各种标志组合传递给函数。某些整数被视为位域,整数中的每个位表示某个标志的布尔值。例如,如果我们有一个1字节的位域,它可能看起来像这样:
10010101
这意味着无论将哪些标志定义为位位置0,2,4,7都设置为true
,其他标志设置为false
。您通常使用按位运算和预定义常量来构造它,而不是手动构造此位域并记住哪个位是哪个标志。
在您的情况下,NSMonthCalendarUnit
定义为01000
,NSDayCalendarUnit
定义为10000
。当你将按位OR (|
)放在一起时,你得到11000
,这个位域表示设置了这两个标志。