Objective-C query string builder and parser
Objective-C
#import <Foundation/Foundation.h>
static NSString *BuildQuery(NSDictionary<NSString *, NSString *> *params) {
NSMutableCharacterSet *allowed = [NSCharacterSet.URLQueryAllowedCharacterSet mutableCopy];
[allowed removeCharactersInString:@"&=+?"]; // keep separators out of values
NSMutableArray<NSString *> *pairs = [NSMutableArray array];
[params enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop) {
[pairs addObject:[NSString stringWithFormat:@"%@=%@", [key stringByAddingPercentEncodingWithAllowedCharacters:allowed], [value stringByAddingPercentEncodingWithAllowedCharacters:allowed]]];
}];
return [pairs componentsJoinedByString:@"&"];
}
static NSDictionary<NSString *, NSString *> *ParseQuery(NSString *query) {
NSMutableDictionary *out = [NSMutableDictionary dictionary];
for (NSString *pair in [query componentsSeparatedByString:@"&"]) {
NSArray *kv = [pair componentsSeparatedByString:@"="];
NSString *key = [kv.firstObject stringByRemovingPercentEncoding] ?: kv.firstObject;
NSString *value = kv.count > 1 ? [kv[1] stringByRemovingPercentEncoding] : @"";
if (key.length) out[key] = value ?: @"";
}
return out;
}