Reputation: 18149
NSString *myStrings = @"abcdefghijklmnopqrstuvwxyz";
How could I iterate each of the letters (a, b, c, d, e, etc..) in an Objective-C for
loop?
Upvotes: 11
Views: 16372
Reputation: 9925
Enumerate substrings of NSString characters with a block
NSString *characters = @"abcdefghijklmnopqrstuvwxyz";
[characters enumerateSubstringsInRange:NSMakeRange(0, characters.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
NSLog(@"substring: %@ substringRange: %@, enclosingRange %@", substring, NSStringFromRange(substringRange), NSStringFromRange(enclosingRange));
}];
Upvotes: 3
Reputation: 638
I would suggest to use getCharacters:range: instead. You get the raw unicode array with one object call and can iterate over the result. The output is the same, but it's faster.
NSString *inputString = @"abcdefghijklmnopqrstuvwxyz";
NSUInteger length = inputString.length;
unichar buffer[length+1];
// do not use @selector(getCharacters:) it's unsafe
[inputString getCharacters:buffer range:NSMakeRange(0, length)];
for(int i = 0; i < length; i++)
{
NSLog(@"%C", buffer[i]);
}
Upvotes: 6
Reputation: 10849
One way is to use a simple for-loop:
for (NSInteger charIdx=0; charIdx<myStrings.length; charIdx++)
// Do something with character at index charIdx, for example:
NSLog(@"%C", [myStrings characterAtIndex:charIdx]);
Upvotes: 22