Skip to content

Instantly share code, notes, and snippets.

@alfonsotesauro
Created January 10, 2019 23:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alfonsotesauro/6751456a1c67b9cb44a9ebdd22a7837d to your computer and use it in GitHub Desktop.
Save alfonsotesauro/6751456a1c67b9cb44a9ebdd22a7837d to your computer and use it in GitHub Desktop.
This code helps you find strings nested into hierarchies of NSDictionary and NSArray
// Usage:
// NSString *toFind = @"theString";
// NSString *result = [self findStringInDictionary:dict searchString:toFind];
-(NSString *)findStringInDictionary:(NSMutableDictionary *)dict searchString:(NSString *)searchString {
NSString __block *toReturn = nil;
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSString class]]) {
if ([obj rangeOfString:searchString].location == 0) {
toReturn = key;
*stop = YES;
}
} else if ([obj isKindOfClass:[NSArray class]]) {
toReturn = [self findStringInArray:obj searchString:searchString];
if (toReturn != nil) { *stop = YES; }
} else if ([obj isKindOfClass:[NSDictionary class]]) {
toReturn = [self findStringInDictionary:obj searchString:searchString];
if (toReturn != nil) { *stop = YES; }
}
}];
return toReturn;
}
-(NSString *)findStringInArray:(NSMutableArray *)array searchString:(NSString *)searchString {
NSString __block *toReturn = nil;
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSString class]]) {
if ([obj rangeOfString:searchString].location == 0) {
toReturn = obj;
*stop = YES;
}
} else if ([obj isKindOfClass:[NSArray class]]) {
toReturn = [self findStringInArray:obj searchString:searchString];
if (toReturn != nil) { *stop = YES; }
} else if ([obj isKindOfClass:[NSDictionary class]]) {
toReturn = [self findStringInDictionary:obj searchString:searchString];
if (toReturn != nil) { *stop = YES; }
}
}];
return toReturn;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment