如何在Swift中将url.query转换为字典? [英] How do I convert url.query to a dictionary in Swift?

查看:121
本文介绍了如何在Swift中将url.query转换为字典?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个URL进入AppDelegate方法:

I have a URL coming in to the AppDelegate method:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
}

URL看起来像 www.wesite.com/shareplace.html?placeid=123 .

如何将其转换为易于访问的字典?

How can it be converted to a dictionary for easy access?

我在某个网站上找到了一些代码,但是在Xcode 9中显示了一个错误:

I found some code on some website, but it's showing an error in Xcode 9:

 extension URL {
    var queryDictionary: [String: AnyObject]? {
        return URLComponents(url: self, resolvingAgainstBaseURL: false)?
            .queryItems?
            .reduce([:], combine: { (var result: [String: AnyObject], queryItem) -> [String: AnyObject] in
                if queryItem.value?.containsString(",") ?? false {
                    let array = queryItem.value?.componentsSeparatedByString(",")

                    result[queryItem.name] = array
                }
                else {
                    result[queryItem.name] = queryItem.value
                }

                return result
            })
    }
}

.reduce([:],组合:{(var result:[String:AnyObject],queryItem)->中的[String:AnyObject](变量结果)参数可能没有'var'指示符

.reduce([:], combine: { (var result: [String: AnyObject], queryItem) -> [String: AnyObject] in (var result) Parameters may not have the 'var' specifier

推荐答案

简单扩展

extension URL {
    var queryDictionary: [String: String]? {
        guard let query = self.query else { return nil}

        var queryStrings = [String: String]()
        for pair in query.components(separatedBy: "&") {

            let key = pair.components(separatedBy: "=")[0]

            let value = pair
                .components(separatedBy:"=")[1]
                .replacingOccurrences(of: "+", with: " ")
                .removingPercentEncoding ?? ""

            queryStrings[key] = value
        }
        return queryStrings
    }
}

用法

let urlString = "http://www.youtube.com/video/4bL4FI1Gz6s?hl=it_IT&iv_logging_level=3&ad_flags=0&endscreen_module=http://s.ytimg.com/yt/swfbin/endscreen-vfl6o3XZn.swf&cid=241&cust_gender=1&avg_rating=4.82280613104"
let url = URL(string: urlString)
print(url!.queryDictionary ?? "NONE")

这篇关于如何在Swift中将url.query转换为字典?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆