URLのパラメータ部分を NSDictionary に変換したい場合って良くありますよね。ruby で言う CGI::parse みたいなの。ちょっと必要になったので、NSURL クラスをカテゴリで拡張してみました。
NSURL+dictionaryFromQueryString.h
# import <Foundation/Foundation.h>
@interface NSURL (dictionaryFromQueryString)
-(NSDictionary *) dictionaryFromQueryString;
@end
NSURL+dictionaryFromQueryString.m
# import "NSURL+dictionaryFromQueryString.h"
@implementation NSURL (dictionaryFromQueryString)
-(NSDictionary *) dictionaryFromQueryString{
NSString *query = [self query];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:0];
NSArray *pairs = [query componentsSeparatedByString:@"&"];
for (NSString *pair in pairs) {
NSArray *elements = [pair componentsSeparatedByString:@"="];
NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[dict setObject:val forKey:key];
}
return dict;
}
@end
NSURL ではなく NSString にカテゴリ追加してもいいかもしれませんね。