Я пытаюсь получить текущий URL-адрес WKWebView, найти/скопировать из него одно значение и создать новый URL-адрес.
Я использую Swift и имею такой URL-адрес https://example.org/bundle-572974a2.html
и пытаюсь получить следующее значение 572974a2
.
Я намерен создать новый URL-адрес с этим значением. Цифры могут время от времени меняться.
Я использую этот код для получения текущего URL-адреса WKWebView. Я думаю, что сначала мне нужно преобразовать это в строку.
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
Как я могу изменить/вставить value: "XXXXXXXX"
со значением 572974a2
старого URL?
Некоторые простые манипуляции с 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-» (или любая последовательность из семи букв). часть, которую вы не хотите.
Затем создание нового 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])
}
P.S. Манипуляции со строками в Swift — это боль.
Я обновил свой ответ кодом, который может обрабатывать только суффикс или суффикс и префикс, которые необходимо удалить. И, конечно же, он справляется с тем, что не нужно ничего удалять.
Работа со строками в Swift 5.7/iOS 16 намного лучше, чем раньше. Возможно, вы захотите узнать об улучшениях.
@matt Я только что просмотрел главу о строках в книге Swift 5.7 и не вижу ничего другого. Я буду искать. Хотя, если у вас есть один конкретный пример, который может помочь в моих поисках. Спасибо.
Спасибо @HangarRash Это работает отлично! Просто из любопытства, как мне заменить код, если URL-адрес иногда
bundle-572974a2-1484
, а я все еще ищу572974a2
. Я предполагаю, что самым простым должно быть если, то код? Если строка длиннее 15 символов, удалить дополнительный последний символ?