如何增加NSNumber?
即。 myNSNumber ++
答案 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);