Search code examples
iosswift3google-places-api

How to extract street, city, etc. from GMSPlace Address Components


I'm using Google Places API for iOS and can successfully retrieve nearby places and present the address as a string. What I'm trying to do is extract address components such as city to store in a database.

The documentation indicates a GMSPlace has an addressComponents property (an array), but I can't seem to figure how to use this property.

The code below provides sets the entire address to the text of a label, but I can't get beyond that:

Edit ---- added code that shows how I'm trying to access Address Components

venueLabel.isHidden = false
            venueLabel.text = selectedPlace?.name
            addressLabel.isHidden = false
            addressLabel.text = selectedPlace?.formattedAddress
            let addressComponents = selectedPlace?.addressComponents
            for component in addressComponents! {
                let city = component["city"] //Error Type GMSPaceAddressComponent has no subscript members
                print(city)
            }

Solution

  • A safe Swift 4.2 solution:

    let name = place.addressComponents?.first(where: { $0.type == "city" })?.name
    

    selectedPlace.addressComponents is a array of GMSAddressComponent which have 2 properties type and name. In you case it will be like

        for component in addressComponents! {
        if component.type == "city" {
        print(component.name)
        }
       }
    

    GMSAddressComponent is a class not a dictionary or array that's you are getting this error.

    Additional component types can be referred from the link.