Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save damozhang/2816938 to your computer and use it in GitHub Desktop.
Save damozhang/2816938 to your computer and use it in GitHub Desktop.
Creating a query string from an NSDictionary.
NSDictionary *queryParameters = [NSDictionary dictionaryWithValuesAndKeys:1, @"page", nil, @"enabled", 25, @"size", nil];
[queryParameters queryString]; // This will return "?page=1&enabled&size=25"
#import <Foundation/Foundation.h>
@interface NSDictionary (QueryStringBuilder)
- (NSString *)queryString;
@end
#import "NSDictionary+QueryStringBuilder.h"
static NSString * escapeString(NSString *unencodedString)
{
NSString *s = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge_retained CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
kCFStringEncodingUTF8);
return s;
}
@implementation NSDictionary (QueryStringBuilder)
- (NSString *)queryString
{
NSMutableString *queryString = nil;
NSArray *keys = [self allKeys];
if ([keys count] > 0) {
for (id key in keys) {
id value = [self objectForKey:key];
if (nil == queryString) {
queryString = [[NSMutableString alloc] init];
[queryString appendFormat:@"?"];
} else {
[queryString appendFormat:@"&"];
}
if (nil != key && nil != value) {
[queryString appendFormat:@"%@=%@", escapeString(key), escapeString(value)];
} else if (nil != key) {
[queryString appendFormat:@"%@", escapeString(key)];
}
}
}
return queryString;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment