Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C手册中一行的解释_Objective C - Fatal编程技术网

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)中的最后一个问题:我想是的。不过我不完全确定。