Objective-C Language Scission


Exemple

Vous pouvez diviser une chaîne en un tableau de parties, divisé par un caractère séparateur .

NSString * yourString = @"Stack,Exchange,Network";
NSArray * yourWords = [yourString componentsSeparatedByString:@","]; 
// Output: @[@"Stack", @"Exchange", @"Network"]

Si vous devez diviser sur un ensemble de plusieurs délimiteurs différents , utilisez -[NSString componentsSeparatedByCharactersInSet:] .

NSString * yourString = @"Stack Overflow+Documentation/Objective-C";
NSArray * yourWords = [yourString componentsSeparatedByCharactersInSet:
                      [NSCharacterSet characterSetWithCharactersInString:@"+/"]];
// Output: @[@"Stack Overflow", @"Documentation", @"Objective-C"]`

Si vous devez diviser une chaîne en caractères individuels , parcourez la longueur de la chaîne et convertissez chaque caractère en une nouvelle chaîne.

NSMutableArray * characters = [[NSMutableArray alloc] initWithCapacity:[yourString length]];
for (int i = 0; i < [myString length]; i++) {
    [characters addObject: [NSString stringWithFormat:@"%C", 
                                      [yourString characterAtIndex:i]];
}

Comme dans l' exemple de longueur , gardez à l'esprit qu'un "caractère" est une unité de code UTF-16, pas nécessairement ce que l'utilisateur considère comme un caractère. Si vous utilisez cette boucle avec @"🇮🇹" , vous verrez qu'elle est divisée en quatre parties.

Pour obtenir une liste des caractères perçus par l'utilisateur, utilisez -enumerateSubstringsInRange:options:usingBlock:

NSMutableArray * characters = [NSMutableArray array];
[yourString enumerateSubstringsInRange:(NSRange){0, [yourString length]}
                               options:NSStringEnumerationByComposedCharacterSequences
                            usingBlock:^(NSString * substring, NSRange r, NSRange s, BOOL * b){
                                [characters addObject:substring];
                            }];

Cela préserve les grappes de graphèmes comme le drapeau italien en tant que sous-chaîne unique.