Objective c 使用compare:options:range:比较不同长度的字符串会产生错误的结果

Objective c 使用compare:options:range:比较不同长度的字符串会产生错误的结果,objective-c,cocoa-touch,nsstring,string-comparison,Objective C,Cocoa Touch,Nsstring,String Comparison,为什么这种比较会导致否 BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)]; 当我在@“th”和@“th”上测试它时,它是是 我在这里遗漏了什么?这是违反直觉的,但是range参数只适用于接收器。另一个字符串(比较:的参数)的长度不受范围限制。您的呼叫将@“th”减少到范围{0,2},从而产生@“th”(即,这没有效果

为什么这种比较会导致

BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];
当我在
@“th”
@“th”
上测试它时,它是


我在这里遗漏了什么?

这是违反直觉的,但是
range
参数只适用于接收器。另一个字符串(比较:的参数)的长度不受范围限制。您的呼叫将
@“th”
减少到范围{0,2},从而产生
@“th”
(即,这没有效果),然后将其与
@“他们”
进行比较

您将看到:

NSComparisonResult comp = [@"They" compare:@"th" 
                                   options:NSCaseInsensitiveSearch 
                                     range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;

产生您期望的结果,因为它将接收器(
@“他们”
)削减(到
@“Th”
),然后进行比较。

有趣的是,比较如何与“Th”和“他们”进行比较,如果您使用
NSCaseInsensitiveSearch
与否,有什么区别吗?使用选项0,它会给出相同的结果。奇怪……谢谢你的回答。是的,这是设计缺陷。