Сохранение идентификатора Google Places и передача в UIView

У меня возникли проблемы с сохранением сведений о месте из Google Мест на карте. Я могу построить приложение нормально, но затем вылетает, когда я выбираю место из GMSAutocompleteViewController... "Не удалось привести значение типа 'GMSPlace' (0x10075bec8) к 'NSString' (0x1afec1398)."

Я хотел бы сохранить данные выбранного места и затем отправить эти данные для отображения в UIView и UITableView. Не уверен, что я делаю не так...

    // MARK: GOOGLE AUTO COMPLETE DELEGATE

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

        // Do something with the selected place.
        // A hotel in Saigon with an attribution.
//        let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
        let placeID = GMSPlace.self

        placesClient.lookUpPlaceID((placeID as AnyObject) as! String, callback: { (place, error) -> Void in
            if let error = error {
                print("lookup place id query error: \(error.localizedDescription)")
                return
            }

            guard let place = place else {
                print("No place details for \(placeID)")
                return
            }

            print("Place name \(place.name)")
            print("Place address \(place.formattedAddress)")
            print("Place placeID \(place.placeID)")
            print("Place attributions \(place.attributions)")
        })

        self.dismiss(animated: true, completion: nil)

        setupConfirmationPopUp()

    }

1 ответ

Решение

Ваш код (GMSPlace.self) создает ссылку на GMSPlace введите сам, а не конкретный экземпляр. Метод делегата предоставит обратно экземпляр GMSPlace что контроллер представления был в состоянии автозаполнения до. Используя этот экземпляр, вы можете получить идентификатор места из свойства под названием placeID,

Пытаться.

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

    // Do something with the selected place.
    // A hotel in Saigon with an attribution.
    // let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
    let placeID = place.placeID

    placesClient.lookUpPlaceID(placeID, callback: { (place, error) -> Void in
        if let error = error {
            print("lookup place id query error: \(error.localizedDescription)")
            return
        }

        guard let place = place else {
            print("No place details for \(placeID)")
            return
        }

        print("Place name \(place.name)")
        print("Place address \(place.formattedAddress)")
        print("Place placeID \(place.placeID)")
        print("Place attributions \(place.attributions)")
    })

    self.dismiss(animated: true, completion: nil)

    setupConfirmationPopUp()

}
Другие вопросы по тегам