Swift 4 从 Google 个地方获取多个地方 API

Swift 4 Get multiples places from Google Places API

我无法从 Google 个地点 API 获取多个地点。问题是...如果我只获取一种引脚类型,如 Bars,没问题,没问题。但是,如果我尝试获得 餐厅、酒吧、赌场 ... 多种类型,它只会让我获得第一名,在我们的例子中是餐厅。

我尝试用 Postman 和下面的 link 提出相同的请求...但是例如

我使用此代码获取我想要的地方:

func fetchPlacesNearCoordinate(_ coordinate: CLLocationCoordinate2D, radius: Double, types:[String], completion: @escaping PlacesCompletion) -> Void {

    var urlString = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=\(coordinate.latitude),\(coordinate.longitude)&radius=\(50000)&rankby=prominence&sensor=true&key=\(googleApiKey)"
    let typesString = types.count > 0 ? types.joined(separator: "|") : "food"
    urlString += "&types=\(typesString)"
    urlString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) ?? urlString

    guard let url = URL(string: urlString) else { completion([]); return }

    if let task = placesTask, task.taskIdentifier > 0 && task.state == .running {
        task.cancel()
    }

    DispatchQueue.main.async {
        UIApplication.shared.isNetworkActivityIndicatorVisible = true
    }

    placesTask = session.dataTask(with: url) { data, response, error in

        if data != nil{
            for el in data!{
                //print(el)
            }
        }
        var placesArray: [PlaceContent] = []
        defer {
            DispatchQueue.main.async {
                UIApplication.shared.isNetworkActivityIndicatorVisible = false
                completion(placesArray)
            }
        }

        guard let data = data else { return }

        do{
            let decode = try JSONDecoder().decode(GooglePlacesAnswer.self, from: data)
            placesArray = (decode.results?.map{ [=13=].toPlaceContent() }) ?? []
        } catch let value{
            print(value.localizedDescription)
        }
    }
    placesTask?.resume()
}

您无法获取官方文档中所述的多种类型的位置。您必须发出多个请求并合并结果。

https://developers.google.com/maps/documentation/javascript/places

type — Restricts the results to places matching the specified type. Only one type may be specified (if more than one type is provided, all types following the first entry are ignored). See the list of supported types.