1

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

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

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

}

它抛出一个错误,说明:

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

在此处输入图像描述

4

1 回答 1

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)

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

long random(void);

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

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

然后转换为

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

如果您不在乎得到数字对象的“风味”,则只需将该行手动转换为

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

但 Xcode 无法为您决定。

于 2013-06-01T21:23:20.353 回答