Получите значение параметров URL-адреса в WKWebView и создайте новый URL-адрес

Я пытаюсь получить текущий 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?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Некоторые простые манипуляции с 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 — это боль.

Спасибо @HangarRash Это работает отлично! Просто из любопытства, как мне заменить код, если URL-адрес иногда bundle-572974a2-1484, а я все еще ищу 572974a2. Я предполагаю, что самым простым должно быть если, то код? Если строка длиннее 15 символов, удалить дополнительный последний символ?

tobias 27.11.2022 23:05

Я обновил свой ответ кодом, который может обрабатывать только суффикс или суффикс и префикс, которые необходимо удалить. И, конечно же, он справляется с тем, что не нужно ничего удалять.

HangarRash 27.11.2022 23:47

Работа со строками в Swift 5.7/iOS 16 намного лучше, чем раньше. Возможно, вы захотите узнать об улучшениях.

matt 28.11.2022 01:07

@matt Я только что просмотрел главу о строках в книге Swift 5.7 и не вижу ничего другого. Я буду искать. Хотя, если у вас есть один конкретный пример, который может помочь в моих поисках. Спасибо.

HangarRash 28.11.2022 01:15

Другие вопросы по теме