url字符串转字典 swift5

Code1:

/// url字符串转字典
///
/// - Parameter urlString: urlString字符串
/// - Returns: [String: Any]
public func urlStringtoParams(_ urlString:String) -> [String: Any] {
    // 1 保存参数
    var url_array = [""]
    // 2 内容中是否存在?或者//
    if urlString.contains("?") {
        url_array = urlString.components(separatedBy:"?")
    }else{
        url_array = urlString.components(separatedBy: "//")
    }
    // 3 多个参数,分割参数
    let urlComponents = url_array[1].components(separatedBy: "&")
    // 4 保存返回值
    var params = [String: Any]()
    // 5 遍历参数
    for keyValuePair in urlComponents {
        // 5.1 分割参数 生成Key/Value
        let pairComponents = keyValuePair.components(separatedBy:"=")
        // 5.2 获取数组首元素作为key
        let key = pairComponents.first?.removingPercentEncoding
        // 5.3 获取数组末元素作为value
        let value = pairComponents.last?.removingPercentEncoding
        // 5.4 判断参数是否是数组
        if let key = key, let value = value {
            // 5.5 已存在的值,生成数组
            if let existValue = params[key] {
                // 5.8 如果是已经生成的数组
                if var existValue = existValue as? [Any] {
                    // 5.9 把新的值添加到已经生成的数组中去
                    existValue.append(value)
                    params[key] = existValue
                } else {
                    // 5.7 已存在的值,先将他生成数组
                    params[key] = [existValue, value]
                }
            } else {
                // 5.6 参数是非数组
                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)

Result

["activity_id": ["39", "20", "41", "481", "000"], "initiator_mobile": "13881671333"]
["activity_id": ["39", "20", "41", "481", "000"]]
["initiator_mobile": "13881678888"]

Code2:

extension URL {
    /// 获取URL内的Parameters
    func getUrlParameters() -> [String: String]? {
        
        var params: [String: String] = [:]
        
        let array = self.absoluteString.components(separatedBy: "?")
        if array.count == 2 {
            let paramsStr = array[1]
            if paramsStr.count > 0 {
                let paramsArray = paramsStr.components(separatedBy: "&")
                for param in paramsArray {
                    let arr = param.components(separatedBy: "=")
                    if arr.count == 2 {
                        params[arr[0]] = arr[1]
                    }
                }
            }
        }
        return params
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容