URLのパラメータ部分を NSDictionary に変換する

More than 1 year has passed since last update.

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 にカテゴリ追加してもいいかもしれませんね。