关于隐式转换丢失整数精度的警告
Warning about Implicit conversion loses integer precision
static id SLRandomValueFromArray(NSArray *array) {
if ([array count] == 0) {
return nil;
}
return [array objectAtIndex:(NSUInteger)arc4random_uniform([array count])]; // WARNING HERE
}
警告说
Implicit conversion loses integer precision: 'NSUInteger' (aka 'unsigned long') to 'u_int32_t' (aka 'unsigned int')
我以前从未遇到过这个警告,也不确定如何用 Xcode 7 和 iOS 8
解决这个问题
将您的代码更改为此
[array objectAtIndex:arc4random_uniform((u_int32_t)[array count])]
原因:
这是stdlib.h中的arc4random_uniform
,它的输入是u_int32_t
u_int32_t arc4random_uniform(u_int32_t /*upper_bound*/)
但是[array count]
return NSUInteger,所以你需要转换
static id SLRandomValueFromArray(NSArray *array) {
if ([array count] == 0) {
return nil;
}
return [array objectAtIndex:(NSUInteger)arc4random_uniform([array count])]; // WARNING HERE
}
警告说
Implicit conversion loses integer precision: 'NSUInteger' (aka 'unsigned long') to 'u_int32_t' (aka 'unsigned int')
我以前从未遇到过这个警告,也不确定如何用 Xcode 7 和 iOS 8
解决这个问题将您的代码更改为此
[array objectAtIndex:arc4random_uniform((u_int32_t)[array count])]
原因:
这是stdlib.h中的arc4random_uniform
,它的输入是u_int32_t
u_int32_t arc4random_uniform(u_int32_t /*upper_bound*/)
但是[array count]
return NSUInteger,所以你需要转换