Objective-C手册中一行的解释
我看了苹果手册的下一行,我不明白Objective-C手册中一行的解释,objective-c,Objective C,我看了苹果手册的下一行,我不明白 NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; 完整的代码是 NSDate *startDate = ...; NSDate *endDate = ...; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; N
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运营商的章程是什么!”
在我的logical unitFlags=NSMonthCalendarUnit或NSDayCalendarUnit中,C和C类/派生语言通常使用称为位字段的东西将各种标志组合传递给函数。某个整数被视为一个位字段,整数中的每一位表示某个标志的布尔值。例如,如果我们有一个1字节的位字段,它可能如下所示:
10010101
这意味着定义为位位置0、2、4、7的任何标志都设置为true
,其他标志设置为false
。您通常使用按位操作和预定义常量来构造该位字段,而不是手动构造该位字段并记住哪个位是哪个标志
在您的情况下,
NSMonthCalendarUnit
被定义为01000
,NSDayCalendarUnit
被定义为10000
。当按位或(|
)将它们组合在一起时,将得到11000
,表示同时设置了这两个标志的位字段。0、2、4和7在您的示例中设置为true。@KenThomases:Whoops——修复。谢谢@Linuxios感谢kCFCalendarUnitQuarter=(1UL@user3741098)中的最后一个问题:我想是的。不过我不完全确定。