警告:转换为Boxing语法需要将'long'转换为'int'

时间:2013-06-01 21:13:19

标签: objective-c warnings nsnumber

任何想法如何让这个警告消失。代码运行正常,我只是不喜欢我的项目中的警告。我之前从来没有遇到过这个警告,所以我想在一座鼹鼠山上建造一座山。拳击语法?这是指方括号吗?尝试使用Xcode在Objective-C中对旧项目进行现代化时会出现此警告。

for (int i = 0; i <= 6; i++) {

   [sequence addObject:[NSNumber numberWithInt:random()% 6]]; 

}

它会引发错误说明:

转换为装箱语法需要将'long'转换为'int'

enter image description here

1 个答案:

答案 0 :(得分:1)

“拳击”是指拳击C表达式的新语法,例如

NSNumber *n = @(2*3+4)

而不是

NSNumber *n = [NSNumber numberWithInt:(2*3+4)];

(详见http://clang.llvm.org/docs/ObjectiveCLiterals.html)。

在你的情况下,

[NSNumber numberWithInt:random()% 6]

创建一个包含int

的数字对象
@(random()% 6)

会创建一个包含long的数字对象,因为random()被声明为

long random(void);

因此,要获得与转换前完全相同的行为,您必须编写

[NSNumber numberWithInt:(int)(random()% 6)]

然后转换为

@((int)(random()% 6))

如果你不关心你得到的数字对象的“味道”,那么只需转换该行 手动到

[sequence addObject:@(random()% 6)];

但Xcode无法为您决定。