/// url字符串轉(zhuǎn)字典
///
/// - Parameter urlString: urlString字符串
/// - Returns: [String: Any]
public func urlStringtoParams(_ urlString:String) -> [String: Any] {
// 1 保存參數(shù)
var url_array = [""]
// 2 內(nèi)容中是否存在?或者//
if urlString.contains("?") {
url_array = urlString.components(separatedBy:"?")
}else{
url_array = urlString.components(separatedBy: "http://")
}
// 3 多個參數(shù)忿墅,分割參數(shù)
let urlComponents = url_array[1].components(separatedBy: "&")
// 4 保存返回值
var params = [String: Any]()
// 5 遍歷參數(shù)
for keyValuePair in urlComponents {
// 5.1 分割參數(shù) 生成Key/Value
let pairComponents = keyValuePair.components(separatedBy:"=")
// 5.2 獲取數(shù)組首元素作為key
let key = pairComponents.first?.removingPercentEncoding
// 5.3 獲取數(shù)組末元素作為value
let value = pairComponents.last?.removingPercentEncoding
// 5.4 判斷參數(shù)是否是數(shù)組
if let key = key, let value = value {
// 5.5 已存在的值蚕礼,生成數(shù)組
if let existValue = params[key] {
// 5.8 如果是已經(jīng)生成的數(shù)組
if var existValue = existValue as? [Any] {
// 5.9 把新的值添加到已經(jīng)生成的數(shù)組中去
existValue.append(value)
params[key] = existValue
} else {
// 5.7 已存在的值,先將他生成數(shù)組
params[key] = [existValue, value]
}
} else {
// 5.6 參數(shù)是非數(shù)組
params[key] = value
}
}
}
return params
}
Use:
let string1 = "http://share?initiator_mobile=13881671333&activity_id=39&activity_id=20&activity_id=41&activity_id=481&activity_id=000"
let string2 = "http://activity_id=39&activity_id=20&activity_id=41&activity_id=481&activity_id=000"
let string3 = "http://initiator_mobile=13881678888"
let params1 = urlStringtoParams(string1)
let params2 = urlStringtoParams(string2)
let params3 = urlStringtoParams(string3)
print(params1)
print(params2)
print(params3)