NSCalendarUnit:NSCalendarUnitNanosecond是否为NSCalendarUnit的有效枚举值?

时间:2013-12-21 12:31:21

标签: ios xcode enums

我在iOS项目中有一个代码的switch / case部分,用于检查NSCalendarUnit类型的变量。首先,Xcode 5.0.2发出警告,不包括switch语句中的一些枚举值。所以我添加了其余的,除了NSCalendarUnitNanosecond,Xcode表示在iOS中不可用,甚至在显示自动完成选择时通过它添加红色删除线。然而,Xcode 5.0.2仍在给我警告

  

在交换机

中未处理枚举值'NSCalendarUnitNanosecond'

它对iOS有效吗?

(它是Mac OS X的一部分,例如https://developer.apple.com/library/mac/releasenotes/General/APIDiffsMacOSX10_9/Foundation.htm

作为旁注,有趣的是https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSCalendar_Class/History/History.html#//apple_ref/doc/uid/TP40003626-RH1-SW1的Apple文档已过时,最近一次更新是在2011年。

1 个答案:

答案 0 :(得分:3)

预处理源文件时,可以看到NSCalendarUnit的定义 在iOS上扩展到

enum NSCalendarUnit : NSUInteger {
// ...
NSCalendarUnitNanosecond __attribute__((availability(ios,unavailable))) = (1 << 15),
// ...
}

表示iOS上的NSCalendarUnitNanosecond 不可用

但似乎编译器没有正确地遵守可用性属性 检查switch语句时。

使用以下示例可以轻松复制:

enum MyEnum {
    Enum1,
    Enum2,
    Enum3 UNAVAILABLE_ATTRIBUTE
};

enum MyEnum e = 0;
switch (e) {
    case Enum1:
    case Enum2:
        break;
    default:
        break;
}

还会产生&#34;枚举值,而不是在交换机&#34;编译时发出警告 -Weverything。这似乎是一个编译器错误。

当然,您可以使用

在本地取消警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wswitch-enum"

// switch-statement

#pragma clang diagnostic pop