【问题标题】:Get flag emoji/string from country code with 3 letters从国家代码中获取带有 3 个字母的标志表情符号/字符串
【发布时间】:2019-08-05 04:11:42
【问题描述】:

我有一系列国家/地区,它们以 3 个字母为我提供国家/地区代码(ISO 3166-1 alpha-3 国家/地区代码)。

例如。 “USA”代表美利坚合众国

我有一种方法可以给我 2 个字母的标志表情符号/字符串,即“US”而不是“USA”。

以下方法适用于 2 个字母的国家/地区代码,但不适用于 3 个字母。

func flag(countryCode: String) -> String? {
    var string = ""
    let country = countryCode.uppercased()

    let regionalA = "????".unicodeScalars
    let letterA = "A".unicodeScalars
    let base = regionalA[regionalA.startIndex].value - letterA[letterA.startIndex].value

    for scalar in country.unicodeScalars {
        guard let regionalScalar = UnicodeScalar(base + scalar.value) else { return nil }
        string.unicodeScalars.append(regionalScalar)
    }
    return string.isEmpty ? nil : string
}

如何从 3 个字母的国家代码获得标志?

【问题讨论】:

  • 您可以将 3 字母代码用作字典的键,将 2 字母代码用作值。
  • @Magnas 可以,但我正在寻找更有效的方法。
  • 这些标志(显然)基于两个字母(alpha-2)的国家代码,所以您的实际问题是“如何将三个字母的国家代码转换为两个字母的代码? ”
  • @MartinR 是的。我知道通过将 3 个字母与 2 个字母代码映射然后得到一个表情符号,但我正在寻找是否有可用的本地解决方案。

标签: swift emoji


【解决方案1】:

编写一个包含所有 CountryCode 翻译的翻译集合。在这个对象中,我会放置 2 个字段或属性。一个是 TripleCountryCode 道具/字段,另一个是 dualCountryCode 道具/字段...

O.C.您必须输入必须手动翻译的每个代码,如下所示: (我放 Typescript 是因为它是我的主要编码语言,它看起来和你的代码很相似,所以也许你可以使用它......)

打字稿代码

// We take an interface as the object declaration
export interface TranslatedCountryCode {
  tripleCode: string;
  dualCode: string;
}

// We set up a class to handle the translations
export class TranslationClass {
  static translations: TranslatedCountryCode[] = [
    { tripleCode: "USA", dualCode: "US" },
    { tripleCode: "GER", dualCode: "DE" },
    { tripleCode: "GBR", dualCode: "GB" } // And so on....
  ];
  static GetDualTranslation(tripleCode: string): string | null {
    for (var key in this.translations)
      // If we find something we return it....
      if (tripleCode === this.translations[key].tripleCode)
        return this.translations[key].dualCode;
      // If we don't find any translation we return null....
    return null;
  }
  static GetTripleTranslation(dualCode: string): string | null {
    for (var key in this.translations)
      // If we find something we return it....
      if (dualCode === this.translations[key].dualCode)
        return this.translations[key].tripleCode;
    // If we don't find any translation we return null....
    return null;
  }
}

然后你可以简单地调用翻译:

TranslationClass.GetDualTranslation("USA") // Returns US

TranslationClass.GetTripleTranslation("US") // Returns USA

如果这篇文章对你有帮助,请点个赞,我将不胜感激。

亲切的问候

编辑:我注意到你可以 o.c.也拿一本字典,但是你必须把每一个翻译都输入到三码字典和双码字典中……我用 for 循环解决了这个问题,以避免双重分配。

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 2018-11-24
    • 2017-12-02
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多