关于隐式转换的警告会丢失整数精度

时间:2015-11-12 01:55:06

标签: ios warnings xcode7

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解决此问题

1 个答案:

答案 0 :(得分:1)

将您的代码更改为此

[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]返回NSUInteger,所以你需要施放