Паш*_*хин 11 url ios swift swift4
let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url?.appendingPathComponent(path)
Run Code Online (Sandbox Code Playgroud)
追加后,路径/somePath?变为somePath%3F。
将?成为一个%3F。问号替换为百分比编码的转义字符。
如果我使用,URL 会正确输出:
let urlFormString = URL(string:"https://example.com/somePath?")
Run Code Online (Sandbox Code Playgroud)
为什么appendingPathComponent转换?为%3F?
appendingPathComponent如果路径组件包含问号,我该如何使用?
Sul*_*han 11
URL 的通用格式如下:
scheme:[//[userinfo@]host[:port]]path[?query][#fragment]
Run Code Online (Sandbox Code Playgroud)
您必须意识到的是,?不是path. 它是path和之间的分隔符query。
如果您尝试添加?到路径,它必须是 URL 编码的,因为?它不是路径组件的有效字符。
最好的解决方案是?从path. 它在那里没有意义。但是,如果您有一个部分 URL 想要附加到基本 URL,那么您应该将它们作为字符串加入:
let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url.flatMap { URL(string: $0.absoluteString + path) }
Run Code Online (Sandbox Code Playgroud)
简而言之,appendingPathComponent不是应该用于追加 URL 查询的函数。
你应该removingPercentEncoding在 URL 上使用absoluteString,
let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url?.appendingPathComponent(path).absoluteString.removingPercentEncoding
print(urlWithPath!)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6990 次 |
| 最近记录: |