Как отфильтровать результат отображения по типам мест из компонента GMSPlace Types - PullRequest
0 голосов
/ 30 августа 2018

В настоящее время я использую Google Places SDK для iOS и читаю этот пример кода от Google . Я попытался прочитать его и выяснить, как сортировать типы мест на основе GMSPlace , и есть компонент под названием types, который я могу отсортировать. Дальнейшие исследования показали, что Google поддерживает эти типы мест в этом списке , но все, что я могу найти, - это использовать его с Google Place API, анализируя результат запроса из https://maps.googleapis.com/maps/api/place/findplacefromtext/output?parameters При попытке распечатать GMSPlace.types через place.types

override func viewDidLoad() {
    super.viewDidLoad()

    // Configure the table
    tableDataSource =
      PlaceDetailTableViewDataSource(place: place,
                                     extensionConstraint: headerHeightExtensionConstraint,
                                     tableView: tableView)
    tableView.backgroundView = tableBackgroundView
    tableView.dataSource = tableDataSource
    tableView.delegate = tableDataSource

    // Configure the UI elements
    lookupPhoto()
    configureMap()
    configureBars()
    print(place.types)
}

Они возвращают этот массив при выборе местоположения ["cafe", "store", "restaurant", "food", "point_of_interest", "establishment"] Это означает, что я могу отсортировать это по типам мест, но до сих пор я не могу понять, как отсортировать и отобразить результат в виде карты для этого примера проекта. Есть идеи?

Обновление 1: Этот является упрощенным проектом в этом репо и все еще содержит тот же вопрос, что и я. Особенно likelyPlaces все еще GMSPlace в этом проекте.

Обновление 2: пока что для likelyPlaces я могу сортировать базу по types, используя эту

var likelyPlaces: [GMSPlace] = []
var lengthOfArray: Int = 0
for i in 0..<lengthOfArray {
        if (likelyPlaces[i].types.contains("store")) {
            print(likelyPlaces[i])
        }
    }

, но когда я преобразую его в удаление любого элемента, который не содержит store в массиве Вероятно, я получил Thread 1: Fatal error: Index out of range

for i in 0..<lengthOfArray {
        if !(likelyPlaces[i].types.contains("store")) {
            print(likelyPlaces[i])
            likelyPlaces.remove(at: i)
        }
    }

Результат Я заметил, что результат повторяется 4 раза до его сбоя.

Обе они в одной теме о GMSPlace, поэтому я думаю, что могу оставить это в одном и том же вопросе.

Обновление 3: только что нашел решение для второго обновления. Создать массив для размещения отсортированных мест. В моем случае я создаю var restaurant: [GMSPlace] = [], затем создаю if else условие для likelyPlaces, чтобы отсортировать его.

for i in 0..<likelyPlaces.count {
        if (likelyPlaces[i].types.contains("restaurant") && !restaurant.contains(likelyPlaces[i])) {
            restaurant.append(likelyPlaces[i])
        }
    }

Затем очистите likelyPlaces и заполните его только что созданным массивом

likelyPlaces.removeAll()
likelyPlaces = restaurant

Вот оно. Все еще выясняю первый, хотя.

...