objective-c - 比较不同长度的字符串与 compare :options:range: produces wrong result

标签 objective-c cocoa-touch nsstring string-comparison

为什么这个比较结果是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/

相关文章:

ios - NSDateFormatter用于“2014年1月1日”

objective-c - 我可以在 .nib 中定义 socket 而不指定 Controller 吗?

objective-c - iOS 5 Newsstandkit在哪里存储下载的问题?

ios - UISegmentedControl 中的文本不完全居中?

ios - swift:将字符串转换为 double 时出现问题

objective-c - 将 NSString 转换为键值对

ios - 如何在 Objective C 中将 NSString 转换为 NSArray

ios - 在 WatchKit 中使用 Helvetica Neue 无效,其他自定义字体有效

iphone - NSMutableArray 释放插入的对象。 -> 导致内存泄漏

ios - 为什么 ViewController 的初始方向不是横向的,而应该是横向的?