2010-07-11 75 views

回答

10

这里有一个小的辅助功能:

BOOL isContainedIn(NSArray* bunchOfStrings, NSString* stringToCheck) 
{ 
    for (NSString* string in bunchOfStrings) { 
     if ([string caseInsensitiveCompare:stringToCheck] == NSOrderedSame) 
      return YES; 
    } 
    return NO; 
} 

当然,这可以为不同的使用情况下大大优化。

如果,例如,你赚了很多针对恒定bunchOfStrings检查,你可以使用一个NSSet持有字符串的小写版本,并使用containsObject:

BOOL isContainedIn(NSSet* bunchOfLowercaseStrings, NSString* stringToCheck) 
{ 
    return [bunchOfLowercaseStrings containsObject:[stringToCheck lowercaseString]]; 
} 
+0

谢谢。我特别寻找像caseInsensitiveCompare: – 2010-07-11 09:12:46

2

只是为了一些补充添加到尼古拉的回答是:

NSOrderedSame如果你调用012被定义为0

typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending}; 

所以对一个nil对象,你会得到nil。然后你比较nilNSOrderSame(这是0),你会得到一个当然是错误的比赛。

此外,您将不得不检查传递给caseInsensitiveCompare:的参数是否必须不为零。从documentation

该值不能为零。如果此值为零,则行为为 未定义,并可能在未来版本的OS X中更改。