【问题标题】:Iphone, Obtaining a List of countries in an NSArrayIphone,获取 NSArray 中的国家/地区列表
【发布时间】:2010-10-04 21:41:44
【问题描述】:

我有一个让用户选择国家/地区的菜单。与地址字段中的contacts.app国家菜单中的完全一样。

有人知道获取国家/地区列表的简单方法吗?我已经使用 NSLocale 生成了一系列国家/地区,但不幸的是,它只是国家/地区代码,而不是人类可读的等价物。我不想要“GB”,我想要英国。

【问题讨论】:

标签: ios objective-c iphone xcode cocoa-touch


【解决方案1】:

让这个在操场上工作

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()

【讨论】:

    【解决方案2】:

    谢谢查克。

    如果有人有兴趣或想在这里找到相同的解决方案,这里是我的国家排序数组代码。

    目标-C:

    NSLocale *locale = [NSLocale currentLocale];
    NSArray *countryArray = [NSLocale ISOCountryCodes];
    
    NSMutableArray *sortedCountryArray = [[NSMutableArray alloc] init];
    
    for (NSString *countryCode in countryArray) {
    
        NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
        [sortedCountryArray addObject:displayNameString];
    
    }
    
    [sortedCountryArray sortUsingSelector:@selector(localizedCompare:)];
    

    斯威夫特:

    let locale = NSLocale.currentLocale()
    let countryArray = NSLocale.ISOCountryCodes()
    var unsortedCountryArray:[String] = []
    for countryCode in countryArray {
        let displayNameString = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
        if displayNameString != nil {
            unsortedCountryArray.append(displayNameString!)
        }
    }
    let sortedCountryArray = sorted(unsortedCountryArray, <)
    

    斯威夫特 3

        let locale = NSLocale.current
        let unsortedCountries = NSLocale.isoCountryCodes.map { locale.localizedString(forRegionCode: $0)! }
        let sortedCountries = unsortedCountries.sorted()
    

    【讨论】:

    • 你可能想用countryArray.count的容量初始化sortedCountryArray
    【解决方案3】:

    斯威夫特 3

    let locale = Locale.current
    let countries = Locale.isoRegionCodes.map {
        locale.localizedString(forRegionCode: $0)!
    }.sorted()
    

    【讨论】:

      【解决方案4】:

      与上面的答案几乎相同,只是使用flatMap 更短更快捷。

      let locale = NSLocale.currentLocale()
      var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
          return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
      }
      countries.sortInPlace()
      

      【讨论】:

        【解决方案5】:

        您可能想要定义语言环境..
        并且自动释放的内存太多,这可能很关键,你永远不知道。所以也要在 for 循环内创建自动释放池。 我有这个:

        NSMutableArray * countriesArray = [[NSMutableArray alloc] init]; 
        NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] autorelease];
        
        NSArray *countryArray = [NSLocale ISOCountryCodes]; 
        for (NSString *countryCode in countryArray) 
        {
            NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        
            NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
            [countriesArray addObject:displayNameString];
            [pool release];
        
        }
        
        [countriesArray sortUsingSelector:@selector(compare:)];
        

        【讨论】:

          【解决方案6】:

          使用[[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](其中 countryCode 是国家代码列表中的一项)获取用户当前语言环境中的国家/地区名称。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-10-11
            • 1970-01-01
            • 2017-12-23
            • 1970-01-01
            • 1970-01-01
            • 2015-03-08
            • 1970-01-01
            相关资源
            最近更新 更多