NSNotFound,NSInteger,NSUInteger和NSRange.location

Ros*_*ter 9 cocoa compare

NSNotFound定义为NSIntegerMax,定义为LONG_MAX.

NSRange.location被定义为a NSUInteger.

一些Foundation方法返回NSRange其位置值为的NSNotFound.

所以,经常做这种比较:

if (aRange.location == NSNotFound) 
Run Code Online (Sandbox Code Playgroud)

但这不是应该生成警告的有符号和无符号整数之间的比较吗?

Eik*_*iko 12

您正在将无符号(64位)变量与有符号常量进行比较,该常量也适合变量的范围(它不是负数).所以不需要警告.

通常在与两侧的负常数或变量进行比较时出现警告(即一个部分是或可以是负数而另一个部分只是正数或零).

旁注:NSNotFound在32位与64位平台上有所不同,因此请勿在任何地方硬编码或存储该值.