Emi*_*irC 2 ios swift urlsession
您好我正在尝试将queryItems添加到我的URLComponents但是因为URLQueryItem返回其值作为可选项,url会在其中保留一个问号.
var params = ["id":"5"]
let queryParams = toStringDictionary(dictionary: params).map { pair in
return URLQueryItem(name: pair.key, value: pair.value)
}
var components = URLComponents(string: fullURL)
components.queryItems = queryParams
print(components.url)//This is the full url https://demo.com/users/?5
//This https://demo.com/users/?5 should be this https://demo.com/users/5
Run Code Online (Sandbox Code Playgroud)
问号当然会导致错误的网址.我无法摆脱它.
查询参数通过问号与网址的其余部分分隔,例如:
https://example.com/path?param_name=param_value
Run Code Online (Sandbox Code Playgroud)
问号不是由于可选项,而是提供查询参数的方式.
您的评论中的示例看起来已经丢失了参数的名称,我希望它能够阅读
https://demo.com/users/?id=5
Run Code Online (Sandbox Code Playgroud)
如果它肯定不包含该id=位,请您分享实施情况,toStringDictionary以便我们可以看到那里发生了什么?你传入的字典已经是一个字典字典了,所以有这样一个函数似乎很奇怪.
编辑:遵循您的澄清(现已消失,但明确表示您希望添加到路径而不是查询字符串)
看起来您的代码正在正确添加查询参数; 仔细看看它产生的URL,它会是https://demo.com/users/?id=5.查询参数不是路径的一部分,它们最后出现并与URL的其余部分分开?
从您的编辑中,您看起来实际上想要做的是添加到URL的路径,以便获得https://demo.com/users/5.该URL没有任何查询参数,因此URLQueryItem该作业的错误工具也是如此.
要添加到路径,您可以执行以下操作:
let userID = "5"
let url = URL(string: "https://example.com/users")!
let newUrl = url.appendingPathComponent(userID)
print(newUrl.absoluteString) //https://example.com/users/5
Run Code Online (Sandbox Code Playgroud)
NB - url在示例中仅为了简洁而强制解包,因为传递给URL()的字符串已知有效.在实际使用中,您应该更仔细地对待可选项.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |