在NS_ENUM中放置一个unicode字符

时间:2014-04-03 01:21:09

标签: objective-c unicode enums

当我尝试在NS_ENUM列表中放置一个unicode字符时,我会收到以下代码的警告:

NSLog(@"H\u2082O");

        typedef NS_ENUM(NSInteger, Gas) {
            Ar,
            CO,
            NO\u2082,
            H\u2082O
        };

请注意,H\u2082ONO\u2082代表H2O和NO2,其中2是下标。这在NSString中工作正常,但它在NS_ENUM中不起作用。

是否可以在枚举中包含unicode字符或枚举限制为字符串?

1 个答案:

答案 0 :(得分:0)

枚举文字遵循标识符的规则 - 松散地它们必须以字母或下划线开头,后续字符可以是字母,数字或下划线。

"松散"因为这已经扩展为Unicode,C标准列出了标识符中允许的Unicode值的允许范围,以及那些不能作为初始字符的子集。

Unicode U + 2082,SUBSCRIPT TWO,在C11中被列为允许,但不能是初始字符。然而,它被Xcode / Clang 5.1拒绝。其他字符被接受,例如U + 2124,其他人拒绝,例如U + 2122。因此,似乎Clang正在使用一组不同的允许字符到C11,你已经选择了一个。

但是你为什么要这样做?这只是一个枚举文字,就像变量名永远不会在Objective-C中显示/打印为其标识符一样。在NO\u2082执行时,键入NO2没有助记符读取。

所以我认为你可能在技术上已经在编译器中发现了一个错误,但我想知道你是否因为错误的原因而这样做,并认为枚举文字将根据其名称输出(例如在Pascal中) )?