如何添加2个NSNumbers?

时间:2014-04-19 23:58:19

标签: objective-c cocoa-touch

为什么以下添加失败并出现以下错误?

NSNumber *five = [NSNumber numberWithInt:5];
NSNumber *three = [NSNumber numberWithInt:3];
NSNumber *eight = [five intValue] + [three intValue];

ARC

不允许将int隐式转换为NSNumber

4 个答案:

答案 0 :(得分:5)

使用现代语法:

NSNumber *five = @5;
NSNumber *three = @3;
NSNumber *eight = @([five intValue] + [three intValue]);

为了完整起见:尝试将int值分配给NSNumber变量会导致错误。必须包装该值。

答案 1 :(得分:2)

您无法将int分配给NSNumber。您必须使用NSNumber numberWithInt:NSNumber值中实例化int对象:

NSNumber *eight = [NSNumber numberWithInt:([five intValue] + [three intValue])];

或者你可以这样做:

NSNumber *eight = @([five intValue] + [three intValue]);

但是,您无法在不调用某些功能的情况下从int转换为NSNumber

答案 2 :(得分:0)

你需要这样做:

NSNumber *eight = [NSNumber numberWithInt:([five intValue] + [three intValue])];

如果可以,请避免使用NSNumber进行数字操作(例如添加),而是使用int值。只需在最终需要时创建NSNumber(即在可可库调用中使用它)。

答案 3 :(得分:0)

[five intValue] + [three intValue]不会产生NSNumber个对象,会产生int,与5 + 3的方式相同。这解释了您的错误Implicit conversion of int to NSNumber is disallowed with ARC

您想要的代码行是:NSNumber *eight = [NSNumber numberWithInt:[five intValue] + [three intValue]];