如何从GMSPlace地址组件中提取街道,城市等

Mar*_*oon 8 ios google-places-api swift3

我正在使用适用于iOS的Google Places API,可以成功检索附近的地点并将地址显示为字符串.我要做的是提取地址组件,如城市,以存储在数据库中.

文档表明GMSPlace有一个addressComponents属性(一个数组),但我似乎无法想象如何使用这个属性.

下面的代码提供了整个地址到标签的文本,但我不能超越:

编辑----添加了代码,显示我正在尝试访问地址组件

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)
            }
Run Code Online (Sandbox Code Playgroud)

Sur*_*put 11

一个安全的Swift 4.2解决方案:

let name = place.addressComponents?.first(where: { $0.type == "city" })?.name
Run Code Online (Sandbox Code Playgroud)

selectedPlace.addressComponents是一个GMSAddressComponent数组,它有2个属性类型和名称.在你的情况下它会是这样的

    for component in addressComponents! {
    if component.type == "city" {
    print(component.name)
    }
   }
Run Code Online (Sandbox Code Playgroud)

GMSAddressComponent是一个类,而不是您收到此错误的字典或数组.

可以从链接引用其他组件类型.

  • Google地点列表中不存在城市 (2认同)

msa*_*zic 5

对于最新的 Google Places API(2019 年 7 月),这可以为您提供帮助。实际上,谷歌现在为每个元素添加了几种类型。因此“type”现在已被弃用,“types”是新提交的。

你可以这样做:

 for addressComponent in (self.mySelectedPlace?.addressComponents)! {
            for type in (addressComponent.types){

                switch(type){
                    case "country":
                        var country = addressComponent.name

                    case "postal_code":
                         var postCode = addressComponent.name

                default:
                    break
                }

            }
        }
Run Code Online (Sandbox Code Playgroud)