2017-01-10 5 views
3

Я пытаюсь расшифровать URL, который имеет другой URL (отдельно закодированный) в качестве параметра запроса:Проблема с URL-адрес Decode в прошивкой

com.testScheme://openurl?url=https%3A%2F%2Fm%2Euber%2Ecom%2Ful%3Faction%3DsetPickup%26pickup%3Dmy%5Flocation%26dropoff%5Bformatted%5Faddress%5D%3D5394%2520General%2520Hood%2520Trl%2C%2520Nashville%2520TN 

Однако приведенный ниже код, кажется, «двойное декодирование» дважды закодированный url.

guard let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), 
    let requestType = urlComponents.host else { 
     return false 
} 

if requestType.lowercased() == "openurl" { 
    guard let queryItems = urlComponents.queryItems, 
     let urlString = queryItems.filter({ $0.name == "url" }).first?.value?.removingPercentEncoding, 
     let url = URL(string: urlString) else { 
     //unable to get parameters 
     return false 
    } 

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + DispatchTimeInterval.milliseconds(25)) { 
     UIApplication.shared.openURL(url) 
    }    

    return true 
} 

Выход urlString:

https://m.uber.com/ul?action=setPickup&pickup=my_location&dropoff[formatted_address]=5394 General Hood Trl, Nashville TN 

Мне нужно urlString быть:

https://m.uber.com/ul?action=setPickup&pickup=my_location&dropoff[formatted_address]=5394%20General%20Hood%20Trl,%20Nashville%20TN 

Почему "двойное декодирование" происходит и как я могу это исправить?

ответ

1

Попробуйте удалить removingPercentEncoding из ниже линий

let urlString = queryItems.filter({ $0.name == "url" }).first?.value?.removingPercentEncoding 
+0

Ааа ... так что элементы запроса уже декодируются для меня. Понимаю. Спасибо за быстрый ответ. Я буду отмечать это как ответ, когда SO дайте мне через 5 минут. – Jake