我怎样才能使用 # 符号而不是 ?在 URLQueryItem 中?
How can I use a # symbol instead of ? in URLQueryItem?
如果我像这样创建 URL:
guard var urlComponents = URLComponents(url: "https://example.com/something", resolvingAgainstBaseURL: false) else {
return
}
let queryItems = URLQueryItem(name: "token", value: token)
urlComponents.queryItems = [queryItems]
guard let urlWithQueryItem = urlComponents.url else {
return
}
我希望最终结果类似于 https://example.com/something#token=7as78f6asd678768asd768asd678
而不是默认的https://example.com/something?token=7as78f6asd678768asd768asd678
(我正在寻找比搜索和替换 ? 字符更智能的东西)
谢谢
正如@rmaddy 所指出的, ? 的含义有明显区别。和 #。 “?”引入了查询参数,它们是 URL 的一部分。 '#' 引入了 "fragment",它 不是 被认为是 URL.
的一部分
但是,您可以使用 URLComponents
将片段添加到 URL。只需使用 fragment
属性 代替:
urlComponents.fragment = "token=\(token)"
正如其他人所指出的,URLQueryItem 对象与 anchors/fragments 相比更适合与查询字符串一起使用。话虽如此,下面是一个功能,可以帮助您完成您的问题。
func constructURL(withURL urlBase: String, andFragmentFromQueryItem queryItem: URLQueryItem) -> URL?{
guard let url = URL(string:urlBase) else {
return nil
}
guard var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
return nil
}
let fragmentKey = queryItem.name
let fragmentValue = queryItem.value ?? ""
urlComponents.fragment = "\(fragmentKey)=\(fragmentValue)"
guard let urlWithFragment = urlComponents.url else {
return nil
}
return urlWithFragment
}
let url = constructURL(withURL:"https://example.com/something",
andFragmentFromQueryItem: URLQueryItem(name: "token", value: "tokenValue"))
let urlString = url?.absoluteString
print("\(urlString!)")
这里是一个 link 到有效的 Swift fiddle 代码。
http://play.swiftengine.io/code/8JKI3/2
如果我像这样创建 URL:
guard var urlComponents = URLComponents(url: "https://example.com/something", resolvingAgainstBaseURL: false) else {
return
}
let queryItems = URLQueryItem(name: "token", value: token)
urlComponents.queryItems = [queryItems]
guard let urlWithQueryItem = urlComponents.url else {
return
}
我希望最终结果类似于 https://example.com/something#token=7as78f6asd678768asd768asd678
而不是默认的https://example.com/something?token=7as78f6asd678768asd768asd678
(我正在寻找比搜索和替换 ? 字符更智能的东西)
谢谢
正如@rmaddy 所指出的, ? 的含义有明显区别。和 #。 “?”引入了查询参数,它们是 URL 的一部分。 '#' 引入了 "fragment",它 不是 被认为是 URL.
的一部分但是,您可以使用 URLComponents
将片段添加到 URL。只需使用 fragment
属性 代替:
urlComponents.fragment = "token=\(token)"
正如其他人所指出的,URLQueryItem 对象与 anchors/fragments 相比更适合与查询字符串一起使用。话虽如此,下面是一个功能,可以帮助您完成您的问题。
func constructURL(withURL urlBase: String, andFragmentFromQueryItem queryItem: URLQueryItem) -> URL?{
guard let url = URL(string:urlBase) else {
return nil
}
guard var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
return nil
}
let fragmentKey = queryItem.name
let fragmentValue = queryItem.value ?? ""
urlComponents.fragment = "\(fragmentKey)=\(fragmentValue)"
guard let urlWithFragment = urlComponents.url else {
return nil
}
return urlWithFragment
}
let url = constructURL(withURL:"https://example.com/something",
andFragmentFromQueryItem: URLQueryItem(name: "token", value: "tokenValue"))
let urlString = url?.absoluteString
print("\(urlString!)")
这里是一个 link 到有效的 Swift fiddle 代码。 http://play.swiftengine.io/code/8JKI3/2