Отображение города и штата с помощью GMSAutocomplete - Swift - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть GMSAutocompleteViewController, который отображается после нажатия кнопки.Вот код:

 let autocompleteController = GMSAutocompleteViewController()
    autocompleteController.delegate = self

    let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
        UInt(GMSPlaceField.placeID.rawValue))!
    autocompleteController.placeFields = fields

    let filter = GMSAutocompleteFilter()
    filter.type = .geocode
    filter.country = "US"
    autocompleteController.autocompleteFilter = filter

    present(autocompleteController, animated: true, completion: nil)

Результаты от контроллера представления выглядят так, когда пользователь ищет:

enter image description here

ииспользуя этот код, я могу вернуть название места, а также отформатированный адрес и атрибуты:

func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
    print("Place name: \(place.name)")
    print("Formatted address: \(place.formattedAddress)")
    print("Place attributions: \(place.attributions)")
    dismiss(animated: true, completion: nil)
}

Распечатывает-> Название места: Tremosine Форматированный адрес: ноль Атрибуты места: ноль

То, что я хочу вернуть, это вторая строка на скриншоте с надписью «Провинция Брешиа, Италия», чтобы я мог сохранить ее на своем бэкэнде.Есть идеи, как получить этот текст?

1 Ответ

0 голосов
/ 07 августа 2019

Я нашел решение для этой проблемы, а также использовал для этого синглтон-класс.

class GoogleLocation {

    var lat, lng: Double?
    var city, state, country, name: String?

    func extractFromGooglePlcae(place: GMSPlace) -> GoogleLocation {
        self.lat = place.coordinate.latitude
        self.lng = place.coordinate.longitude
        self.city = place.name!
        self.state = place.addressComponents?.first(where: { $0.type == "administrative_area_level_1" })?.name
        self.country = place.addressComponents?.first(where: { $0.type == "country" })?.name
        self.name = self.getFullName()


        return self
    }

    private func getFullName() -> String {
        //return "\(String(describing: self.city)), \(String(describing: self.state)), \(String(describing: self.country))"
        return self.city! + ", " + self.state! + ", " + self.country!
    }
}

В viewController вы должны передать объект place.

 func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {

          googleLocation = GoogleLocation().extractFromGooglePlcae(place: place)

        }

Дайте мне знать, если у вас есть какие-либо вопросы по этому поводу. Спасибо

...