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

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

文档表明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) } 

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

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

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

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

斯威夫特4

  var keys = [String]() place.addressComponents?.forEach{keys.append($0.type)} var values = [String]() place.addressComponents?.forEach({ (component) in keys.forEach{ component.type == $0 ? values.append(component.name): nil} }) print(values) 

对于那些跟在我身后的人来说,我无法在Objective-C的任何地方找到它:

 for (int i = 0; i < [place.addressComponents count]; i++) { NSLog(@"name %@ = type %@", place.addressComponents[i].name, place.addressComponents[i].type); } 
 for ( GMSAddressComponent * component in place.addressComponents) { if ( [component.type isEqual: @"locality"] ) { NSLog(@"Current city %@ ", component.name); } } 
 var keys = [String]() place.addressComponents?.forEach{keys.append($0.type)} var values = [String]() place.addressComponents?.forEach({ (component) in keys.forEach{ component.type == $0 ? values.append(component.name): nil} print("All component type \(component.type)") if component.type == "locality"{ print("This is city name \(component.name)") } }) print(values)