6

由于NSNumber您可以使用 Objective-C 中的新文字,例如:

NSNumber *n1 = @1000;  // [NSNumber numberWithInt:1000]

但是似乎不能和枚举一起使用?我试过了:

typedef enum {

    MyEnumA = 0,
    MyEnumB,
    MyEnumC

} MyEnum;

NSNumber *n2 = @MyEnumA;  // [NSNumber numberWithInt:MyEnumA]

但我得到一个编译器错误说:

程序中出现意外的“@”

我不明白为什么它不起作用,因为枚举是一个整数?有没有办法使这项工作?

4

3 回答 3

17

对于命名常量,您需要使用@(MyEnumA).

于 2012-11-08T13:27:41.960 回答
3

你需要使用:

NSNumber *n2 = @(MyEnumA);

我知道这很奇怪,但事实就是如此。我无法想到我的头,但我认为解析器需要括号来区分不同的语法。

我倾向于做的是总是使用括号。这适用于普通数字以及枚举以及如下等式:

int a = 2;
int b = 5;
NSNumber *n = @(a*b);
于 2012-11-08T13:27:24.300 回答
2

其他人已经解释了正确的语法是什么。原因如下:

@blah被称为“文字”语法。您可以使用它来制作包装文字的对象,例如 char、BOOL、int 等,这意味着:

  • @42是一个装箱的 int
  • @'c'是一个盒装字符
  • @"foo"是一个盒装字符*
  • @42ull是一个盒装的 unsigned long long
  • @YES是一个盒装的 BOOL

at 符号后面的所有内容都是原始值。MyEnumValue不是文字。这是一个象征。为了适应这一点,引入了通用装箱语法:

@(MyEnumValue)

你可以在括号内放一堆东西;在大多数情况下,任何类型的变量或表达式都应该起作用。

于 2012-11-08T15:00:04.250 回答