如何增加NSNumber

时间:2011-01-25 11:54:21

标签: objective-c

如何增加NSNumber?

即。 myNSNumber ++

9 个答案:

答案 0 :(得分:124)

NSNumber个对象是不可变的;你能做的最好的事情是获取原始值,增加它然后将结果包装在它自己的NSNumber对象中:

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

答案 1 :(得分:122)

更新:仅供参考,我个人更喜欢BoltClock和DarkDusts的单行答案。它们更简洁,不需要额外的变量。


为了增加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];

答案 2 :(得分:77)

对于使用最新版Xcode(从4.4.1开始编写,SDK 5.1)的任何人,使用对象文字,你可以更清楚地清理代码......

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

处理拳击和取消装箱所有操作仍然有点痛苦,但它会变得更好,或者至少更短。

答案 3 :(得分:30)

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

// Work with 64 bit to support very large values
myNSNumber = [NSNumber numberWithLongLong:[myNSNumber longLongValue] + 1];

// EDIT: With modern syntax:
myNSNumber = @([myNSNumber longLongValue] + 1);

答案 4 :(得分:24)

把它们放在一起,你有:

myNSNumber = @(myNSNumber.intValue + 1);

答案 5 :(得分:3)

我喜欢点表达,因为它更简洁,这就是 IOS 首先支持它的原因:

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

答案 6 :(得分:2)

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

myNSNumber = @(myNSNumber.longLongValue + 1);

对于浮点数的东西,简短的答案如下,但这样做是个坏主意,你会失去精确度,如果你以后进行任何比较,比如[myNSNumber isEqual:@(4.5)]你可能会感到惊讶:

myNSNumber = @(myNSNumber.floatValue + 1);

如果你需要对Objective-C中表示为对象的浮点数进行数学运算(例如,如果你需要将它们放在数组,字典等中),你应该使用NSDecimalNumber

答案 7 :(得分:0)

使用类别以方便将来使用。这是一个基本的想法。

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

答案 8 :(得分:0)

这个问题的答案中有很多好消息。我在我的代码中使用了选定的答案,但它确实有效。然后我开始阅读其余帖子并简化了代码。如果您不熟悉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);