Objective c 警告:转换为装箱语法需要强制转换';长';至';int';

Objective c 警告:转换为装箱语法需要强制转换';长';至';int';,objective-c,warnings,nsnumber,Objective C,Warnings,Nsnumber,你知道怎么让这个警告消失吗。代码运行良好,我只是不喜欢项目中的警告。我以前从未遇到过这个警告,所以我想我是在小题大做。装箱语法?这是指方括号吗?尝试使用Xcode更新Objective-C中的旧项目时,会显示此警告 for (int i = 0; i <= 6; i++) { [sequence addObject:[NSNumber numberWithInt:random()% 6]]; } for(inti=0;i“Boxing”指用于装箱C表达式的新语法,例如 NSN

你知道怎么让这个警告消失吗。代码运行良好,我只是不喜欢项目中的警告。我以前从未遇到过这个警告,所以我想我是在小题大做。装箱语法?这是指方括号吗?尝试使用Xcode更新Objective-C中的旧项目时,会显示此警告

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

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

}
for(inti=0;i“Boxing”指用于装箱C表达式的新语法,例如

NSNumber *n = @(2*3+4)
而不是

NSNumber *n = [NSNumber numberWithInt:(2*3+4)];
(详情请参见)

就你而言

[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不能为您决定这一点。

“装箱”是指装箱C表达式的新语法,例如

NSNumber *n = @(2*3+4)
而不是

NSNumber *n = [NSNumber numberWithInt:(2*3+4)];
(详情请参见)

就你而言

[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无法为您做出决定。

谢谢,伙计,这很有道理。事实上,我应该自己意识到这一点,因为我正在将生产线转换为现代化的Objective-C。我自己没有任何借口。也许是漫长的一天?再次感谢。谢谢,伙计,这很有道理。事实上,我应该自己意识到这一点,因为我正在将生产线转换为现代化的Objective-C。我没有任何借口。也许是漫长的一天?再次感谢。