Swift和Xcode:如何拥有默认的国家/地区列表?

时间:2015-09-15 10:45:11

标签: ios swift

嗨,我是Xcode和Swift的新手。

我正在编写一个应用程序代码,用户可以从列表中选择一个国家/地区,以便为地图添加一个图钉。

基本上,它只是一个带引脚的地图。

我在哪里可以获得默认国家/地区列表?喜欢下拉或其他东西,以便我自己不需要对所有国家进行硬编码。

然后,我知道下一个问题很大,所以我只期待一些指导:

有人可以就如何使用所选国家/地区的GPS坐标向我提供任何指示,以便将地图放置在地图上吗?

谢谢大家的帮助。

4 个答案:

答案 0 :(得分:9)

试试这个。

func counrtyNames() -> NSArray{

    var countryCodes = NSLocale.ISOCountryCodes()
    var countries:NSMutableArray = NSMutableArray()

    for countryCode  in countryCodes{
        let dictionary : NSDictionary = NSDictionary(object:countryCode, forKey:NSLocaleCountryCode)

        //get identifire of the counrty
        var identifier:NSString? = NSLocale.localeIdentifierFromComponents(dictionary as! [String : String])

        let locale = NSLocale.currentLocale()
        //get country name
        let country = locale.displayNameForKey(NSLocaleCountryCode, value : countryCode)//replace "NSLocaleIdentifier"  with "NSLocaleCountryCode" to get language name

        if country != nil {//check the country name is  not nil
            countries.addObject(country!)
        }
    }
    NSLog("\(countries)")
    return countries
}

答案 1 :(得分:4)

使用Apple提供的CLGeocoder课程,您可以同时解决两个问题。只需要求用户在UITextField或其他内容中输入国家/地区名称,您就可以使用该字符串使用以下代码中说明的地理编码方法查找相关位置的名称和坐标:

将地名转换为坐标

  

使用带有简单字符串的CLGeocoder类来启动前向地理编码请求。没有   基于字符串的请求的指定格式:分隔符是   欢迎,但不是必需的,地理编码服务器处理字符串   不区分大小写。例如,以下任何字符串都会   产量结果:

CLGeocoder* geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:@"India"

 completionHandler:^(NSArray* placemarks, NSError* error){

     for (CLPlacemark* aPlacemark in placemarks)
     {
         // Process the placemark and place the pin on MKMapView
     }
}];

答案 2 :(得分:0)

// For swift 2.2

let englishUS = NSLocale(localeIdentifier: "en_US") 
// use "fr_FR" to display country names in french or use any other code

let countryCodes = NSLocale.ISOCountryCodes() //Has all country codes

for localeNameOfCountries in countryCodes {

   if let aValue = englishUS.displayNameForKey(NSLocaleIdentifier, value: localeNameOfCountries) {
  //displaNameForKey returns [String?] so we use if let to unwrap
      print(aValue) 
    }
 }

答案 3 :(得分:0)

作为可重用的Swift 4扩展:

extension Locale {

   public var counrtyNames: [String] {
      return Locale.counrtyNames(for: self)
   }

   public static func counrtyNames(for locale: Locale) -> [String] {
      let nsLocale = locale as NSLocale
      let result: [String] = NSLocale.isoCountryCodes.compactMap {
         return nsLocale.displayName(forKey: .countryCode, value: $0)
      }
      // Seems `isoCountryCodes` already sorted. So, we skip sorting.
      return result
   }
}