如何增加NSNumber

The*_*ner 107 objective-c

如何增加NSNumber?

即myNSNumber ++

Bol*_*ock 125

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

NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1];
Run Code Online (Sandbox Code Playgroud)

  • 现代语言:1,Objective-C:0. (28认同)

Ita*_*ber 122

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


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

例如,NSNumber持有一个整数:

NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
Run Code Online (Sandbox Code Playgroud)

或者NSNumber持有一个浮点数:

NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
Run Code Online (Sandbox Code Playgroud)

  • 这是我讨厌Core Data中NSNumber属性的首要原因.NSNumber非常不便于使用和执行数学运算. (62认同)

sho*_*shi 77

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

NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Run Code Online (Sandbox Code Playgroud)

仍然有点痛苦处理拳击和拆箱一切做简单的操作,但它变得越来越好,或至少更短.

  • @softRli查看http://clang.llvm.org/docs/ObjectiveCLiterals.html查看更多ObjC Literals!非常方便的imo. (6认同)

Dar*_*ust 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);
Run Code Online (Sandbox Code Playgroud)


JLu*_*ell 24

把它们放在一起,你有:

myNSNumber = @(myNSNumber.intValue + 1);
Run Code Online (Sandbox Code Playgroud)