我有以下URL查询:
encodedMessage=PD94bWwgdmVyNlPg%3D%3D&signature=kcig33sdAOAr%2FYYGf5r4HGN
Run Code Online (Sandbox Code Playgroud)
如何拆分查询以获取encodedMessage和signature值?
实现这一目标的正确方法是使用URLComponents:
一种用于解析基于RFC 3986的URL并从其组成部分构造URL的结构.
通过获取url组件主机字符串和查询Items数组,如下所示:
if let urlComponents = URLComponents(string: "http://mydummysite.com?encodedMessage=PD94bWwgdmVyNlPg%3D%3D&signature=kcig33sdAOAr%2FYYGf5r4HGN"), let host = urlComponents.host, let queryItems = urlComponents.queryItems {
print(host) // mydummysite.com
print(queryItems) // [encodedMessage=PD94bWwgdmVyNlPg==, signature=kcig33sdAOAr/YYGf5r4HGN]
}
Run Code Online (Sandbox Code Playgroud)
queryItems数组包含URLQuery项对象,其具有name和value属性:
if let urlComponents = URLComponents(string: "http://mydummysite.com?encodedMessage=PD94bWwgdmVyNlPg%3D%3D&signature=kcig33sdAOAr%2FYYGf5r4HGN"),let queryItems = urlComponents.queryItems {
// for example, we will get the first item name and value:
let name = queryItems[0].name // encodedMessage
let value = queryItems[0].value // PD94bWwgdmVyNlPg==
}
Run Code Online (Sandbox Code Playgroud)
也:
如果您在没有完整URL的情况下获得查询,我建议通过添加虚拟主机作为查询字符串的前缀来执行一个非常简单的技巧,如下所示:
let myQuery = "encodedMessage=PD94bWwgdmVyNlPg%3D%3D&signature=kcig33sdAOAr%2FYYGf5r4HGN"
let myDummyUrlString = "http://stackoverflow.com?" + myQuery
if let urlComponents = URLComponents(string: myDummyUrlString),let queryItems = urlComponents.queryItems {
// for example, we will get the first item name and value:
let name = queryItems[0].name // encodedMessage
let value = queryItems[0].value // PD94bWwgdmVyNlPg==
} else {
print("invalid url")
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取键值对:
let str = "encodedMessage=PD94bWwgdmVyNlPg%3D%3D&signature=kcig33sdAOAr%2FYYGf5r4HGN"
let arr = str.components(separatedBy:"&")
var data = [String:Any]()
for row in arr {
let pairs = row.components(separatedBy:"=")
data[pairs[0]] = pairs[1]
}
let message = data["encodedMessage"]
let sig = data["signature"]
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是您正在寻找的。如果不是,您能否进一步澄清一下您在寻找什么?
| 归档时间: |
|
| 查看次数: |
2964 次 |
| 最近记录: |