2010-07-11 132 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中更改。

相關問題