【问题标题】:How to get query parameters from URL?如何从 URL 中获取查询参数?
【发布时间】:2020-06-30 13:30:46
【问题描述】:

我正在创建手动 Firebase 动态链接

我有一个https://test.page.link/?link=https://test.page.link/register?accessCode%3DAA000000&apn=com.test.foo&ibi=com.test.bar&ofl=https://www.google.com 格式的网址。

如何获取 accessCode 的值?

extension URL {
    
    func valueOf(_ queryParameterName: String) -> String? {
        guard let url = URLComponents(string: self.absoluteString) else { return nil }

        return url.queryItems?.first(where: { $0.name == queryParameterName })?.value
    }
}

使用此扩展,查询项为linkapnofl

url.valueOf("link") 返回:

https://test.page.link/?link=https://test.page.link/register?accessCode=AA000000

我只需要返回的AA000000

【问题讨论】:

  • 有“subURL”,即url里面的url。您需要在aQuery.value 上调用该方法才能找到它。

标签: ios swift url firebase-dynamic-links


【解决方案1】:

由于link是一个url的格式,从它创建一个URL实例,然后像这样使用valueOf(_:)方法获取accessCode的值,

if let link = url.valueOf("link"), let linkUrl = URL(string: link) {
    let accessCode = linkUrl.valueOf("accessCode")
    print(accessCode)
}

【讨论】:

  • 太棒了。如果答案有帮助,请接受。快乐编码?
【解决方案2】:

你在一个 URL 中有一个 URL,更准确地说,一个查询值中有一个 URL,那么如何使用:

extension URL {
    
    func valueOf(_ queryParameterName: String) -> String? {
        guard let url = URLComponents(string: self.absoluteString) else { return nil }
        guard let queryItems = url.queryItems else { return nil }
        for aQueryItem in queryItems {
            if aQueryItem.name == queryParameterName {
                return aQueryItem.value
            } else if let subvalue = aQueryItem.value, let subURL = URL(string: subvalue), let found = subURL.valueOf(queryParameterName) {
                return found
            }
        }
        return nil
    }
}

现在你可以使用url.valueOf("accessCode")

【讨论】:

  • 不得不稍作修改,但现在它可以用于所有可用的参数选项 ``` else if let subvalue = aQueryItem.value, let subURL = URL(string: subvalue) { if let subUrlValue = subURL.valueOf(queryParameterName) { return subUrlValue } } ```
  • 哎呀,确实,如果在子查询中找不到它,就忘了那个案例。接得好。应该是固定的。
猜你喜欢
  • 2018-07-22
  • 2016-06-25
  • 2023-02-21
  • 2018-05-29
  • 1970-01-01
  • 2018-05-07
  • 2016-06-11
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多