为什么这个比较结果是NO
?
BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];
当我在 @"th"
和 @"Th"
上测试它时,它是 YES
。
我在这里错过了什么?
最佳答案
这是违反直觉的,但是 range
参数仅适用于 receiver。另一个字符串的长度(compare:
的参数)没有范围限制。您的调用将 @"th"
减少到范围 {0,2},这会产生 @"th"
(即,这没有效果),然后将其与@“他们”
。
你会看到:
NSComparisonResult comp = [@"They" compare:@"th"
options:NSCaseInsensitiveSearch
range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;
产生您期望的结果,因为它削减了接收者 (@"They"
)(到 @"Th"
)然后进行比较。
关于objective-c - 比较不同长度的字符串与 compare :options:range: produces wrong result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760504/