为什么这种比较会导致NO
?
BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];
当我在@"th"
和@"Th"
上对其进行测试时,YES
。
我在这里缺少什么?
答案 0 :(得分:6)
这是违反直觉的,但range
参数仅适用于接收器。另一个字符串的长度(compare:
的参数)不受范围限制。您的通话会将@"th"
缩小到范围{0,2},这会产生@"th"
(即,这没有效果),然后将其与@"They"
进行比较。
你会看到这个:
NSComparisonResult comp = [@"They" compare:@"th"
options:NSCaseInsensitiveSearch
range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;
产生您期望的结果,因为它会将接收器(@"They"
)向下切割(到@"Th"
),然后进行比较。