我正在做一些练习,并收到一条警告,指出:
隐式转换失去整数精度:“NSUInteger”(又名“unsigned long”)到“int”
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSArray *myColors; int i; int count; myColors = @[@"Red", @"Green", @"Blue", @"Yellow"]; count = myColors.count; // <<< issue warning here for (i = 0; i < count; i++) NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]); } return 0; }
在 64 位 OS X 平台上返回, 和的count方法NSArray``NSUInteger
count
NSArray``NSUInteger
NSUInteger
unsigned long
int
int一个比 更“小”的数据类型,因此NSUInteger是编译器警告。
另请参阅“基础数据类型参考”中的NSUInteger :
在构建 32 位应用程序时,NSUInteger 是一个 32 位无符号整数。64 位应用程序将 NSUInteger 视为 64 位无符号整数。
要修复该编译器警告,您可以将局部count变量声明为
NSUInteger count;
或者(如果你确定你的数组永远不会包含超过2^31-1元素!),添加一个显式转换:
2^31-1
int count = (int)[myColors count];