概要
http://hoge.com/?name1=val1&name2=val2
という URL が存在する場合に、クエリパラメータを抽出し操作したくなる場合があります。
{
"name1": "val1",
"name2": "val2"
}
NSURL
クラスには query
というメソッドが用意されており name1=val1&name2=val2
というクエリ文字列をまとめて取得することは可能ですが、個々のパラメータの抽出はできません。
さすがに正規表現で抽出するのはイケてないですね。
実装
NSURLComponents
および NSURLQueryItem
を利用することによって(比較的)簡単にクエリパラメータを抽出することが可能となります。
# String から NSURLComponents
let comp: NSURLComponents? = NSURLComponents(string: "http://hoge.com/?name1=val1&name2=val2")
# 操作例
for (var i=0; i < comp?.queryItems?.count; i++) {
let item = comp?.queryItems?[i] as NSURLQueryItem
println("name=\(item.name), value=\(item.value)")
}
# 辞書型に格納する
func urlComponentsToDict(comp:NSURLComponents) -> Dictionary<String, String> {
var dict:Dictionary<String, String> = Dictionary<String, String>()
for (var i=0; i < comp.queryItems?.count; i++) {
let item = comp.queryItems?[i] as NSURLQueryItem
dict[item.name] = item.value
}
return dict
}
var dict = urlComponentsToDict(comp!)
dict["name1"] // -> Some "val1"