如何将url.query转换为swift中的字典?
问题描述:
我有URL在AppDelegate方法。如何将url.query转换为swift中的字典?
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
}
网址看起来www.wesite.com/shareplace.html?placeid=123
我的问题是如何将它转换成字典方便地访问。
编辑:我发现一些网站上的一些代码,但它显示在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([:], combine: { (var result: [String: AnyObject], queryItem) -> [String: AnyObject] in
(VAR结果)参数可能没有足够的 '变种' 说明
答
简单的扩展
extension URL {
var queryDictionary: [String: String]? {
guard let query = URLComponents(string: self.absoluteString)?.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")
答
错误
试试这个:
extension URL {
var queryDictionary: [String: AnyObject]? {
return URLComponents(url: self, resolvingAgainstBaseURL: false)?
.queryItems?
.reduce([:], combine: { (lastResult: [String: AnyObject], queryItem) -> [String: AnyObject] in
var result = lastResult
if queryItem.value?.containsString(",") ?? false {
let array = queryItem.value?.componentsSeparatedByString(",")
result[queryItem.name] = array
}
else {
result[queryItem.name] = queryItem.value
}
return result
})
}
}
答
guard let urlQuery = URL(string: "https://en.wikipedia.org/wiki/Query_string?title=Main_page&action=raw")?.query else {
return
}
let queryArray = urlQuery.characters.split { $0 == "&"}.map(String.init)
var parametersDict: [String: String] = [:]
for queryParameter in queryArray {
// split the queryParam into key/value
let keyValueArray = queryParameter.characters.split{$0 == "="}.map(String.init)
let key = keyValueArray.first
let value = keyValueArray.last
parametersDict.updateValue(value!, forKey: key!)
}
print(parametersDict)
// prints ["action": "raw", "title": "Main_page"]