Swift String пропустить / конвертировать польские акценты - PullRequest
0 голосов
/ 11 октября 2018

У меня следующая проблема: я делаю запрос API.С именем города fe 'Poznań "(содержащим некоторые знаки, типичные для некоторых языков), swift не хочет давать мне результат, но когда я делаю тот же запрос через приложение Postman, он дает результат надлежащим образом. Как можноя могу запретить swift конвертировать эти «странные» буквы? city.name "- это название города, которое я передаю из предыдущего VC и googlePlaces API. Вот пример запроса и часть моего кода: https://samples.openweathermap.org/data/2.5/weather?q=London&appid=b6907d289e10d714a6e88b30761fae22

private let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather?q=%@&appid=%@"

let urlString = String(format: kWeatherAPIURL, city.name, weatherAPIKey)
    guard let url = URL(string: urlString) else {
        print("address doesnt exist!")
        return
    }

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Пример использования URLComponents.

Подготовьте такую ​​функцию:

func createWeatherAPIURL(cityName: String, apiKey: String) -> URL? {
    let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather"

    var urlCompo = URLComponents(string: kWeatherAPIURL)
    urlCompo?.queryItems = [
        URLQueryItem(name: "q", value: cityName),
        URLQueryItem(name: "appid", value: apiKey)
    ]
    return urlCompo?.url
}

И используйте ее:

    guard let url = createWeatherAPIURL(cityName: city.name, apiKey: weatherAPIKey) else {
        print("address doesnt exist!")
        return
    }
0 голосов
/ 11 октября 2018

Для краткости я принудительно распаковываюсь здесь:

let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather?q=%@&appid=%@"
let weatherAPIKey = "YourWeatherAPIKey"
let cityName = "Poznań"


let cString = cityName.cString(using: .utf8)!
let utf8CityName = cityName.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!

let urlString = String(format: kWeatherAPIURL, utf8CityName, weatherAPIKey)
let url = URL(string: urlString)!

//https://api.openweathermap.org/data/2.5/weather?q=Pozna%C5%84&appid=YourWeatherAPIKey

Безопасным подходом было бы использование компонентов URL :

let weatherAPIKey = "YourWeatherAPIKey"
let cityName = "Poznań"


var components = URLComponents()
components.scheme = "https"
components.host = "api.openweathermap.org"
components.path = "/data/2.5/weather"
components.queryItems = [URLQueryItem(name: "q", value: cityName),
                         URLQueryItem(name: "appid", value: weatherAPIKey)
]

print(components.url!)  //https://api.openweathermap.org/data/2.5/weather?q=Pozna%C5%84&appid=YourWeatherAPIKey
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...