使用3个字母从国家/地区代码获取标志表情符号/字符串

时间:2019-03-14 10:00:33

标签: swift emoji

我有一些国家/地区,可以提供3个字母的国家代码(supports国家/地区代码)。

例如美国的“美国”

我有一种方法可以从2个字母(即“美国”而不是“美国”)中给我标记表情符号/字符串。

以下方法适用于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个字母的国家/地区代码中获得国旗?

1 个答案:

答案 0 :(得分:0)

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

超频您将必须输入每个必须手动翻译的代码,如下所示: (我使用Typescript,因为它是我的主要编码语言,并且看起来与您的代码相似,所以也许您可以使用它...)

打字稿代码

@import "~@angular/material/prebuilt-themes/indigo-pink.css";

然后,您可以像这样简单地调用翻译:

// 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;
  }
}

如果该帖子对您有所帮助,请给我竖起大拇指,我将非常感谢。

亲切问候

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