2010-07-11 24 views

Répondre

10

Voici une petite fonction d'aide:

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

Bien sûr, cela pourrait être considérablement optimisé pour différents cas d'utilisation.

Si, par exemple, vous faites beaucoup de contrôles contre un bunchOfStrings constant vous pouvez utiliser un NSSet pour contenir les versions minuscules des cordes et utilisez containsObject::

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

vous remercie. Je cherchais particulièrement quelque chose comme caseInsensitiveCompare: –

2

Juste pour ajouter quelques ajouts la réponse de Nikolai:

NSOrderedSame est définie comme 0

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

donc, si vous appelez caseInsensitiveCompare: sur un objet nil vous obtiendriez nil. Alors vous comparez nil avec NSOrderSame (qui est 0) vous obtiendriez un match qui bien sûr est faux.

Vous devrez également vérifier si le paramètre passé à caseInsensitiveCompare: ne doit pas être nul. À partir du documentation:

Cette valeur ne doit pas être nulle. Si cette valeur est nulle, le comportement est indéfini et peut changer dans les futures versions de Mac OS X.