为什么以下添加失败并出现以下错误?
NSNumber *five = [NSNumber numberWithInt:5];
NSNumber *three = [NSNumber numberWithInt:3];
NSNumber *eight = [five intValue] + [three intValue];
ARC
不允许将int隐式转换为NSNumber答案 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]];