使用 swift 删除 URL 中的参数

问题描述 投票:0回答:5

我的 URL 看起来像

myapp://jhb/test/deeplink/url?id=4567
。 我想删除
?
字符之后的所有内容。最后,URL 应类似于
myapp://jhb/test/deeplink/url
。如何。我能做到吗?将 url 转换为字符串?正则表达式?

swift string url
5个回答
15
投票

使用

URLComponents
分隔不同的 URL 部分,对其进行操作,然后提取新的 url:

var components = URLComponents(string: "myapp://jhb/test/deeplink/url?id=4567")!
components.query = nil
print(components.url!)

myapp://jhb/test/deeplink/url


9
投票

方便的 URL 扩展


private extension URL {
    var removingQueries: URL {
        if var components = URLComponents(string: absoluteString) {
            components.query = nil
            return components.url ?? self
        } else {
            return self
        }
    }
}


4
投票

我能实现这个目标吗?将 url 转换为字符串?正则表达式?

使用 URL 时,最好将其视为

URLComponent
:

将 URL 解析为 URL 并从中构造 URL 的结构 组成部分。

因此,引用 URLComponent 您要求的是从 url 中删除 query 子组件:

if var components = URLComponents(string: "myapp://jhb/test/deeplink/url?id=4567") {
    components.query = nil
    
    print(components) // myapp://jhb/test/deeplink/url
}

请注意,

query
是一个可选字符串,这意味着它可能为零(如代码片段中所述,这应该会导致您想要的输出)。


0
投票

你可以这样做

let values = utl?.components(separatedBy: "?")[0]

它将用

?
断开字符串并返回数组。
values
的第一个对象为您提供结果字符串。


0
投票

您可以使用

将每个 URL 组件与 URl 分开
print("\(url.host!)") //Domain name
print("\(url.path)") // Path
print("\(url.query)") // query string
© www.soinside.com 2019 - 2024. All rights reserved.