Is there a simple way to split a NSString into an array of characters?

Solution 1:

You could do something like this (if you want to use enumerators)

NSString *fooString = @"Hello";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[fooString length]]; 

[fooString enumerateSubstringsInRange:NSMakeRange(0, fooString.length)
                              options:NSStringEnumerationByComposedCharacterSequences
                           usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    [characters addObject:substring];
}];

And if you really wanted it in an NSArray finally

NSArray *fooChars = [NSArray arrayWithArray:characters];

Solution 2:

Be sure to care about that some characters like emoji and others may span a longer range than just one index.

Here's a category method for NSString

@implementation (SplitString)

- (NSArray *)splitString
{
    NSUInteger index = 0;
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.length];

    while (index < self.length) {
        NSRange range = [self rangeOfComposedCharacterSequenceAtIndex:index];
        NSString *substring = [self substringWithRange:range];
        [array addObject:substring];
        index = range.location + range.length;
    }

    return array;
}

@end