获取WKWebView中URL参数的值并创建新的URL

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

我正在尝试获取 WKWebView 的当前 URL,从中搜索/复制一个值,然后创建一个新 URL。

我使用 Swift 并拥有这样的 URL

https://example.org/bundle-572974a2.html
并尝试获取以下值
572974a2
。 我的目的是创建一个具有该值的新 URL。这些数字可能会不时发生变化。

我使用此代码来获取当前的 WKWebView URL。我想我必须先将其转换为字符串。

let oldURL = webView.url

我使用此代码来创建我的新 URL。

var components = URLComponents()
        components.scheme = "https"
        components.host = "new-example.org"
        components.path = "/g"

        components.queryItems = [
            URLQueryItem(name: "newbundle", value: "XXXXXXXX")
        ]
        
        let newURL = components.url

如何使用旧 URL 的值

value: "XXXXXXXX"
更改/粘贴
572974a2

ios swift xcode ipados
2个回答
0
投票

一些简单的 URL 操作和字符串处理将为您提供旧 URL 中的号码:

let oldURL = URL(string: "https://example.org/bundle-572974a2.html")! // An example
let name = oldURL.deletingPathExtension().lastPathComponent // bundle-572974a2
let number = name.dropFirst(7) // remove "bundle-"

这假设数字前面总是带有“bundle-”(或者任何七个字母的序列)。如果情况可能有所不同,那么

dropFirst(7)
的使用将需要替换为可以处理“bundle-572974a2”等字符串的代码”并删除你不想要的部分。

然后构建新的 URL 变为:

var components = URLComponents()
components.scheme = "https"
components.host = "new-example.org"
components.path = "/g"

components.queryItems = [
    URLQueryItem(name: "newbundle", value: String(number))
]
        
let newURL = components.url

如果您可能同时需要删除前缀和后缀,以下是删除它们的一种方法。此代码假设如果有要删除的后缀,则将有一个要删除的前缀。如果有后缀且没有要删除的前缀,则此代码会给出错误的结果。

var number = url.deletingPathExtension().lastPathComponent
if let hyphen = number.firstIndex(of: "-") {
    number = String(number[number.index(after: hyphen)...])
}
if let hyphen = number.lastIndex(of: "-") {
    number = String(number[..<hyphen])
}

附注Swift 中的字符串操作很痛苦。


0
投票

使用以下函数获取 url 中的任意或所有参数:

let params = getQueryItems(urlStr)    
if let userId = params["user_id"] {
   //do something with user id
}

func getQueryItems(_ urlString: String) -> [String : String] {
    var queryItems: [String : String] = [:]
    let components: NSURLComponents? = getURLComonents(urlString)
    for item in components?.queryItems ?? [] {
        queryItems[item.name] = item.value?.removingPercentEncoding
    }
    return queryItems
}

func getURLComonents(_ urlString: String?) -> NSURLComponents? {
    var components: NSURLComponents? = nil
    let linkUrl = URL(string: urlString?.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) ?? "")
    if let linkUrl = linkUrl {
        components = NSURLComponents(url: linkUrl, resolvingAgainstBaseURL: true)
    }
    return components
}
© www.soinside.com 2019 - 2024. All rights reserved.