Добавить больше данных в API, определенный в общем классе - PullRequest
1 голос
/ 22 марта 2019

Я называю веб-сервис вот так ...

WebServiceClient.shared.getNearbyLocationsList(with.....

Это, в свою очередь, вызывает другой класс вот так ...

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"

Таким образом, будет вызываться API-адрес.Но мой фактический URL-адрес местоположения выглядит примерно так ...

https://maps.googleapis.com/maps/api/place/nearbysearch/json?sensor=true&location=10.123456,78.910111&radius=1000&key=googleKey

Так что вся эта часть должна быть добавлена ​​с URL-адресом, приведенным выше в static let googleLocationsApi =....:

?sensor=true&location=10.123456,78.910111&radius=1000&key=Aqporjp9asdjhg425jhgjhgvbjhAJGFKJfkjgkj4kjakjfb

Здесь,местоположение, радиус и ключ определяются где-то еще.Так как же я могу иметь структуру API, которая будет принимать эти значения и, следовательно, иметь окончательный API ...?

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

@ Акс, ваш ответ правильный, я внес пару изменений, добавив функцию, с помощью которой вы можете передавать ей динамические параметры.

 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
}
0 голосов
/ 22 марта 2019

Вы можете использовать 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 Это великолепный пост Джона Сунделла, подробно объясняющий его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...