如何增加一个NSNumber

我如何增加一个NSNumber?

即myNSNumber ++

更新:FYI,我个人比较喜欢BoltClock和DarkDusts的单行答案。 它们更简洁,不需要额外的variables。


为了增加一个NSNumber ,你将不得不获得它的值,增加它,并把它存储在一个新的NSNumber

例如,对于一个NSNumber持有一个整数:

 NSNumber *number = [NSNumber numberWithInt:...]; int value = [number intValue]; number = [NSNumber numberWithInt:value + 1]; 

或者为一个NSNumber持有一个浮点数:

 NSNumber *number = [NSNumber numberWithDouble:...]; double value = [number doubleValue]; number = [NSNumber numberWithDouble:value + 1.0]; 

NSNumber对象是不可变的; 你可以做的最好的办法是获取原始值,然后将结果放在自己的NSNumber对象中:

 NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1]; 

对于任何正在使用最新版本的Xcode(使用4.4.1,SDK 5.1编写)的用户,使用对象文字,可以清理代码,甚至更多一点。

 NSNumber *x = @(1); x = @([x intValue] + 1); // x = 2 

处理拳击和拆箱所有事情都是为了做一些简单的操作,但这样做还是有点痛苦的,但是现在变得越来越好,或者至less变短了。

NSNumbers是不可变的,你必须创build一个新的实例。

 // Work with 64 bit to support very large values myNSNumber = [NSNumber numberWithLongLong:[myNSNumber longLongValue] + 1]; // EDIT: With modern syntax: myNSNumber = @([myNSNumber longLongValue] + 1); 

把它们放在一起,你有:

 myNSNumber = @(myNSNumber.intValue + 1); 

我喜欢点expression,因为它更简洁,这就是为什么IOS首先支持它:

 myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1]; 

如果您使用它来存储一个整数值:

 myNSNumber = @(myNSNumber.longLongValue + 1); 

对于浮点数来说,简短的答案是以下几点,但是这样做不是一个好主意,你会失去精确性,如果你稍后进行任何forms的比较,比如[myNSNumber isEqual:@(4.5)],你可能会感到惊讶:

 myNSNumber = @(myNSNumber.floatValue + 1); 

如果您需要在Objective-C中以对象表示的浮点数(即,如果您需要将它们放入数组,字典等)中进行math计算,则应该使用NSDecimalNumber

使用一个类别来减轻将来的使用。 这是一个基本的想法。

  - (void)incrementIntBy:(int)ammount { self = [NSNumber numberWithInt:(self.intValue + ammount)]; } 

在这个问题的答案很多很好的信息。 我用我的代码中select的答案,它的工作。 然后,我开始阅读其余的post,并简化了很多代码。 如果您不熟悉Xcode 5中引入的符号更改,那么阅读起来会有点困难,但它更加清晰。 我大概可以把它做成一行,但是要弄清楚我在做什么有点太难了。

我正在一个字典中存储一个NSNumber,我想增加它。 我得到它,将其转换为一个int,增加它,而将其转换为一个NSNumber,然后把它放回字典。

老代码

  NSNumber *correct = [scoringDictionary objectForKey:@"correct"]; int correctValue = [correct intValue]; correct = [NSNumber numberWithInt:correctValue + 1]; [scoringDictionary removeObjectForKey:@"correct"]; scoringDictionary[@"correct"] = correct; 

新的代码

 NSNumber *correct = [scoringDictionary objectForKey:@"correct"]; scoringDictionary[@"correct"] = @(correct.intValue + 1);