新的NSNumber文字

时间:2012-11-08 13:26:07

标签: objective-c cocoa xcode4.5 nsnumber

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

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

但它似乎不可能与枚举一起使用?我试过了:

typedef enum {

    MyEnumA = 0,
    MyEnumB,
    MyEnumC

} MyEnum;

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

但是我收到编译错误说:

  

程序中意外的'@'

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

3 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:3)

您需要使用:

NSNumber *n2 = @(MyEnumA);

我知道这很奇怪,但它就是它的方式。我无法想到我的头脑,但我认为解析器需要括号以区分不同的语法。

我倾向于总是使用括号。这适用于普通数字以及枚举以及类似的公式:

int a = 2;
int b = 5;
NSNumber *n = @(a*b);

答案 2 :(得分:2)

其他人已经解释了正确的语法是什么。这是为什么

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

  • @42是一个盒装的
  • @'c'是一个盒装字符
  • @"foo"是一个盒装的char *
  • @42ull是一个盒装的无符号长多
  • @YES是一个盒装的BOOL

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

@(MyEnumValue)

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