为什么以下加法失败并显示以下错误?
NSNumber *five = [NSNumber numberWithInt:5];
NSNumber *three = [NSNumber numberWithInt:3];
NSNumber *eight = [five intValue] + [three intValue];
ARC不允许将int隐式转换为NSNumber
为什么以下加法失败并显示以下错误?
NSNumber *five = [NSNumber numberWithInt:5];
NSNumber *three = [NSNumber numberWithInt:3];
NSNumber *eight = [five intValue] + [three intValue];
ARC不允许将int隐式转换为NSNumber
使用现代语法:
NSNumber *five = @5;
NSNumber *three = @3;
NSNumber *eight = @([five intValue] + [three intValue]);
为了完整起见:该错误是由于尝试将一个int
值分配给NSNumber
变量引起的。 该值必须被包装。
您不能仅将一个int
分配给NSNumber
。 您必须使用NSNumber
的numberWithInt:
从int
值实例化NSNumber
对象:
NSNumber *eight = [NSNumber numberWithInt:([five intValue] + [three intValue])];
或者,您可以执行以下操作:
NSNumber *eight = @([five intValue] + [three intValue]);
但是,如果不调用某些函数,就无法从int
转换为NSNumber
。
您需要这样做:
NSNumber *eight = [NSNumber numberWithInt:([five intValue] + [three intValue])];
如果可以,请避免将NSNumber
用于数字运算(例如加法),而应使用int
值。 只需在最终需要时创建一个NSNumber
(即在可可库调用中使用它)。
[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]];