URL 为零或百分比编码

URL is nil or percentage encoded

我有这个URL

https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps

我这样做

let path = "https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps"
let url = URL(string: path!)

结果 url 为零。

我这样做:

var components = URLComponents()
components.scheme = "https"
components.host = "apps.apple.com"
components.path = "/developer/john-doe/id32123123#see-all/mac-apps"

let url = components.url!

生成的 url 编码百分比,就像这样,并且正如预期的那样,URL使用该 URL 完成的请求失败。

https://apps.apple.com/developer/john-doe/id32123123%23see-all/mac-apps

有没有办法在没有任何百分比编码的情况下获得正常的 URL?

如何执行与 URLRequest 一起使用的 URL?

此代码工作正常:

let path = "https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps"
let url = URL(string: path)

我只需要删除 !。路径不是可选的,所以没有什么可以展开的。

你不应该为这样的文字 URL 使用你的后一种技术,但我可以解释为什么它 "not working" 无论如何都符合你的期望。 # 标记 url 片段的开始。这是一个特殊字符,这就是为什么当您尝试将它用作路径的一部分时系统会为您进行百分比编码。这是固定代码:

var components = URLComponents()
components.scheme = "https"
components.host = "apps.apple.com"
components.path = "/developer/john-doe/id32123123"
components.fragment = "see-all/mac-apps"
let url = components.url! // => "https://apps.apple.com/developer/john-doe/id32123123#see-all/mac-apps"

您应该阅读 URL 标准。