#ios #swift
#iOS #swift
Вопрос:
Я вызываю веб-сервис следующим образом…
WebServiceClient.shared.getNearbyLocationsList(with.....
Это, в свою очередь, вызывает другой класс, подобный so..
func getNearbyLocationsList(withParameters parameters: APIParameters, completionHandler: @escaping (Bool, [String: Any]?) -> Void) {
guard let url = APIClient.shared.createWebServiceUrl(forPath: WebServicePath.googleLocationsApi, withParameters: .....
И здесь, эта часть WebServicePath.googleLocationsApi..
вызывает эту переменную в другом классе…
static let googleLocationsApi = "https://maps.googleapis.com/maps/api/place/nearbysearch/json"
let googleKey = "YOUR GOOGLE KEY"
Таким образом, это будет вызываемый URL api. Но мой фактический URL местоположения выглядит примерно так…
https://maps.googleapis.com/maps/api/place/nearbysearch/json?sensor=trueamp;location=10.123456,78.910111amp;radius=1000amp;key=googleKey
Таким образом, вся эта часть должна быть добавлена с URL, указанным выше в static let googleLocationsApi =....
:
?sensor=trueamp;location=10.123456,78.910111amp;radius=1000amp;key=Aqporjp9asdjhg425jhgjhgvbjhAJGFKJfkjgkj4kjakjfb
Здесь местоположение, радиус и ключ определены где-то в другом месте. Итак, как я могу создать структуру api, которая будет принимать эти значения и, следовательно, иметь окончательный api ..?
Ответ №1:
Вы можете использовать URLComponent
для кодирования параметров запроса в URL. Пример:-
var urlComponents = URLComponents(string: googleLocationsApi)!
urlComponents.queryItems = [
URLQueryItem(name: "sensor", value: true),
URLQueryItem(name: "location", value: "10.123456,78.910111")
]
urlComponents.url // this should give you the url you expect.
Для получения более подробной информации перейдите сюда: — https://www.swiftbysundell.com/posts/constructing-urls-in-swift
Это отличный пост Джона Санделла, подробно объясняющий это
Ответ №2:
@Aks, ваш ответ правильный, я внес пару изменений, добавив функцию, с помощью которой вы можете передавать свои динамические параметры вместе с ним.
let googleKey = "YOUR GOOGLE KEY"
var urlComponents = URLComponents(string: googleLocationsApi)!
urlComponents.queryItems = appendQueryItems(queryItems: ["sensor": true,"radius":1000, "location": "10.123456,78.910111", "key": googleKey])
debugPrint(urlComponents.url!)
Определение функции
func appendQueryItems(queryItems: [String: Any]) -> [URLQueryItem] {
var urlQueryItems = [URLQueryItem]()
for (key,value) in queryItems {
urlQueryItems.append(URLQueryItem(name: "(key)", value: "(value)"))
}
return urlQueryItems
}