Objective c 新的NSNumber文本
由于Objective-C中有新的Objective c 新的NSNumber文本,objective-c,cocoa,xcode4.5,nsnumber,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] 但是我得
NSNumber
文本可供使用,例如:
NSNumber *n1 = @1000; // [NSNumber numberWithInt:1000]
但它似乎不可能与枚举一起使用?我试过:
typedef enum {
MyEnumA = 0,
MyEnumB,
MyEnumC
} MyEnum;
NSNumber *n2 = @MyEnumA; // [NSNumber numberWithInt:MyEnumA]
但是我得到一个编译器错误,它说:
程序中出现意外的“@”
我不明白为什么它不工作,因为枚举是int?
有什么方法可以使这项工作正常进行吗?您需要使用:
NSNumber *n2 = @(MyEnumA);
我知道这很奇怪,但就是这样。我想不起来,但我假设解析器需要括号来区分不同的语法
我倾向于总是使用括号。这适用于正常数字、枚举以及以下等式:
int a = 2;
int b = 5;
NSNumber *n = @(a*b);
对于命名常量,您需要使用
@(MyEnumA)
其他人已经解释了正确的语法。原因如下:
@blah
被称为“文字”语法。您可以使用它来创建包装文字的对象,如char、BOOL、int等。这意味着:
是一个带方框的int@42
是一个装箱字符@'c'
是一个装箱字符*@“foo”
是一个装箱的无符号长字符串@42ull
是一个盒装文件@YES
MyEnumValue
不是文本。这是一个象征。为了适应这种情况,引入了通用装箱语法:
@(MyEnumValue)
你可以在括号里放一些东西;在大多数情况下,任何类型的变量或表达式都应该起作用 原因是苹果可能希望稍后添加一个名为
@MyEnumA
的关键字,并且不想破坏您的代码。@GrahamLee名称冲突不限于将来添加到语言中。考虑一个名为“代码>接口或<代码>结束<代码>的枚举。