我正在尝试计算某个 NSDate
之前的年数/天数/分钟数等。我在做:
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:[NSDate date] toDate:date options:0];
我试图让用户选择他们想要查看的组件。假设我有一个包含他们想要的 NSCalendarUnitYear
和 NSCalendarUnitMinute
的数组。我如何将它们连接到 (NSCalendarUnitYear | NSCalendarUnitMinute)
中?
我试过:
NSCalendarUnit *units;
for (NSCalendarUnit *unit in arrayOfUnits) {
units = units | unit;
}
但这不编译。有什么想法吗?
最佳答案
NSCalendarUnit
不是一个对象,它是一个枚举
;您不能将一个存储在 NSArray
中。您可以将它包装在存储在数组中的 NSNumber
中,但是您必须在尝试执行按位运算之前将其解包。
看起来像这样:
NSNumber * userUnitNumber = @(userChosenCalendarUnit);
[arrayOfUnits addObject:calUnitNumber];
// Initialize this to zero or it will contain garbage
// and you'll get bizarre results!
NSCalendarUnit finalUnits = 0;
for( NSNumber * unitNumber in arrayOfUnits ){
// The datatype for an NSCalendarUnit is NSUInteger
finalUnits |= [unitNumber unsignedIntegerValue];
}
但我不确定为什么您不只是在从用户那里获得输入时建立最终值;首先似乎没有任何理由将这些东西放在一个数组中。位掩码在更小的空间内包含与数组一样多的信息(这是它存在的全部原因)。
关于ios - 从单个单位数组构建 NSCalendarUnit 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26395907/