在Swift中从URL删除所有路径组件

and*_*lin 1 url nsurl ios swift

我有一个包含许多路径组件的URL。是否有删除所有路径组件的好方法?基本上,我只想保留方案和URL的主机。以及端口(如果有)。

我当然可以使用现有URL的相关属性来创建新的URL对象:

let newURL = "\(existingURL.scheme!)://\(existingURL.host!)"
Run Code Online (Sandbox Code Playgroud)

或循环遍历pathcomponents,删除最后一个组件,直到没有剩余。

但是,这两种解决方案似乎都不那么优雅,因此我正在寻找一种更好,更安全,更有效的解决方案。

Sul*_*han 7

我看到的唯一可能性是使用URLComponents和手动删除一些组件:

let url = URL(string: "http://www.google.com/and/my/path")!
print(url)

var components = URLComponents(url: url, resolvingAgainstBaseURL: false)!
components.path = ""
print(components.url!) // http://www.google.com
Run Code Online (Sandbox Code Playgroud)

如果您决定手动构建URL,则最好还是URLComponents这样做:

let url = URL(string: "http://www.google.com/and/my/path")!
var components = URLComponents()
components.scheme = url.scheme
components.host = url.host
print(components.url!) // http://www.google.com
Run Code Online (Sandbox Code Playgroud)