从单个单元的数组中构建NSCalendarUnit值

时间:2014-10-16 03:48:05

标签: ios objective-c macos cocoa cocoa-touch

我正在尝试计算年数/天数/分钟/等,直到某个NSDate。我在做:

NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:[NSDate date] toDate:date options:0];

我试图让用户选择他们想要查看的组件。假设我有一个包含他们想要NSCalendarUnitYearNSCalendarUnitMinute的数组。如何将这些连接到(NSCalendarUnitYear | NSCalendarUnitMinute)

我试过了:

NSCalendarUnit *units;
for (NSCalendarUnit *unit in arrayOfUnits) {
    units = units | unit;
}

但这不会编译。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

NSCalendarUnit不是对象,而是enum;你不能在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];
}

但是我不确定为什么你不仅仅是在你从用户那里获得输入时建立最终价值;似乎没有任何理由将这些东西保存在阵列中。位掩码包含的信息与数组在更小的空间中的数量一样多(这是它存在的全部原因)。