0

我想从 Google Places API 获取国家代码,但我不知道如何。

if let addressComponents = place?.addressComponents {
   for addressComponent in addressComponents {
       print("Name: \(addressComponent.name) Type: \(addressComponent.type)")
   }
}

我总是得到这样的结果

Name: Sassnitzer Straße Type: route
Name: Lütten Klein Type: sublocality_level_1
Name: Rostock Type: locality
Name: Rostock Type: administrative_area_level_3
Name: Mecklenburg-Vorpommern Type: administrative_area_level_1
Name: Deutschland Type: country
Name: 18107 Type: postal_code

在 API 中,您可以为自动完成设置不同的过滤器,例如nofilter, geocode, address, establishment, region, city其中一些给我额外的结果,例如administrative_area_level_3但没有国家代码。

这个想法是用户输入他的地址,我只保存国家代码而不是不同语言的国家名称。在另一种编程语言中,国家代码是简称。例如像这样place.address_components[i].short_name

4

2 回答 2

1

国家名称不依赖于编程语言,而是依赖于 API。如果您使用谷歌的反向地理编码 API,您会在文档中发现将国家/地区设置为result_type您正在寻找的结果。您之前打印的结果已经包含 address_component 的说法Deutschland。那个有type country. 在该地址组件中,您应该能够在short_name.

于 2018-10-04T07:14:37.570 回答
-1

试试这个来获取国家名称,你可以转换为国家代码

 if let addressComponents = place.addressComponents,let countryComponent = (addressComponents.filter { $0.type == "country" }.first) {
  let countryName = countryComponent.name
   print("Country::::::::\(countryName)")
}

将国家名称转换为国家代码

private func locale(for fullCountryName : String) -> String {

    for localeCode in NSLocale.isoCountryCodes {
        let identifier = NSLocale(localeIdentifier: localeCode)
        let countryName = identifier.displayName(forKey: NSLocale.Key.countryCode, value: localeCode)
        if fullCountryName.lowercased() == countryName?.lowercased() {
            return localeCode
        }
    }
    return ""
}
于 2018-10-04T07:28:53.147 回答