如何从URL获取查询参数?

时间:2020-06-30 13:30:46

标签: ios swift url firebase-dynamic-links

我正在创建手动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

2 个答案:

答案 0 :(得分:2)

由于link具有网址格式,因此请从中创建一个URL实例,然后使用accessCode这样的方法获取valueOf(_:)值,

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

答案 1 :(得分:1)

您在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")