为什么以下加法失败并显示以下错误?

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

ARC不允许将int隐式转换为NSNumber

===============>>#1 票数:5 已采纳

使用现代语法:

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

为了完整起见:该错误是由于尝试将一个int值分配给NSNumber变量引起的。 该值必须被包装。

===============>>#2 票数:2

您不能仅将一个int分配给NSNumber 您必须使用NSNumbernumberWithInt:int值实例化NSNumber对象:

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

或者,您可以执行以下操作:

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

但是,如果不调用某些函数,就无法从int转换为NSNumber

===============>>#3 票数:0

您需要这样做:

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

如果可以,请避免将NSNumber用于数字运算(例如加法),而应使用int值。 只需在最终需要时创建一个NSNumber (即在可可库调用中使用它)。

===============>>#4 票数: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]];

  ask by 4thSpace translate from so

未解决问题?本站智能推荐: