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



我试图获得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?

一些简单的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-"(或者任何7个字母的序列。如果这可以改变,那么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中,字符串操作是很痛苦的。

最新更新