由于您可以使用Objective-C中的新NSNumber
文字,例如:
NSNumber *n1 = @1000; // [NSNumber numberWithInt:1000]
但它似乎不可能与枚举一起使用?我试过了:
typedef enum {
MyEnumA = 0,
MyEnumB,
MyEnumC
} MyEnum;
NSNumber *n2 = @MyEnumA; // [NSNumber numberWithInt:MyEnumA]
但是我收到编译错误说:
程序中意外的'@'
我不明白为什么它不起作用,因为枚举是一个int? 有没有办法使这项工作?
答案 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)
你可以在括号内放一堆东西;在大多数情况下,任何类型的变量或表达都应该起作用。