Получить флаг эмодзи / строку из кода страны с 3 буквами - PullRequest
0 голосов
/ 14 марта 2019

У меня есть массив стран, который предоставляет мне код страны в 3 буквы ( ISO 3166-1 alpha-3 код страны).

Например. «США» для Соединенных Штатов Америки

У меня есть метод, который может дать мне флаг emoji / string из 2 букв, то есть "US", а не "USA".

Метод ниже работает для двухбуквенного кода страны, но не работает для 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
}

Как мне получить флаг из трехбуквенного кода страны?

1 Ответ

1 голос
/ 14 марта 2019

Создать коллекцию переводов, которая содержит все переводы CountryCode.В этом объекте я бы поставил 2 поля или свойства.Одним из них будет tripleCountryCode prop / field, а другим будет что-то вроде dualCountryCode prop / field ...

OC, вам придется вводить каждый код, который должен быть переведен вручную, вот так: (Я помещаюМашинопись, так как это мой основной язык кодирования и он похож на твой код, поэтому, может быть, ты сможешь его использовать ...)

Код машинописи

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

Пожалуйста, поблагодарите этот пост, если он вам помог, я был бы очень признателен.

С уважением

Редактировать : я заметил, что вы также можете взять словарь, но тогда вам придется дважды вводить каждый перевод в словарь с тройным кодом и словарь с двойным кодом ... Я решил это с помощью цикла for, чтобы избежатьдвойное назначение.

...