我喜欢在 Objective C 中使用该@"string"
符号对字符串文字进行速记处理。有没有办法用NSNumber
s 获得类似的行为?我更多地处理数字,[NSNumber numberWithWhatever:]
到处打电话很乏味。即使创建一个宏也可以,但我对如何最好地做到这一点的了解是有限的。
问问题
7038 次
4 回答
32
由于没有人提到这一点......如果您需要在 NSNumber 中包装一个值,则 NSNumber 文字语法如下。
int val = 13;
NSNumber *numVal = @(val);
于 2013-07-08T20:01:33.657 回答
31
从Clang v3.1开始,您现在可以使用 Objective-C 文字。
NSNumber *fortyTwo = @42; // equivalent to [NSNumber numberWithInt:42]
NSNumber *fortyTwoUnsigned = @42U; // equivalent to [NSNumber numberWithUnsignedInt:42U]
NSNumber *fortyTwoLong = @42L; // equivalent to [NSNumber numberWithLong:42L]
NSNumber *fortyTwoLongLong = @42LL; // equivalent to [NSNumber numberWithLongLong:42LL]
所以,回答你的具体问题:
[Tyler setArms:[[[NSNumber alloc] initWithInt:1] autorelease]];
现在可以写成:
[Tyler setArms:@1];
数组和字典也有文字,但它们超出了这个问题的范围。
要利用 Xcode 中的文字,您至少需要 4.4 版——它带有 Apple 的 LLVM 4.0 编译器。
于 2012-06-20T13:14:07.293 回答
9
我正在使用像这样的宏
#define N(x) [NSNumber numberWithInt: x]
导致代码像
[N(123) intValue];
更新:
应该注意这种宏的 CPU 和内存消耗。虽然@"…"
字符串是常量字符串类的静态编译器生成的字符串(取决于基础可能NSConstantString
在 Cocoa 中?)宏创建在运行时评估的代码,因此每次调用它们时都会创建一个新对象。
于 2010-09-20T12:47:47.683 回答
7
Xcode 4.4 引入了rjstelling 提到的用于NSNumber
,NSArray
和NSDictionary
. 语法很简单:
//Number literal
NSNumber *pi = @3.14;
//Array literal
NSArray *primes = @[ @2, @3, @5, @7, @11 ]; //No nil terminator needed
//Dictionary literal
NSDictionary *dict = @{
@"key1": @42,
@"key2": @"Another key",
@3: @"A NSNumber key"
}; //No nil terminator, stored in "key:value," format
于 2012-07-25T17:56:20.847 回答