Swift NSLocale编程常量

时间:2017-12-17 16:44:35

标签: ios swift internationalization

有没有更好的方法来编码,而不使用魔术“en”,“es”字符串?

 let pre = Locale.preferredLanguages[0]
 if pre == "en"
    ....
  else if pre == "es"
    ....
  else if pre == "xx"
    ....

我在考虑编译时出错,而不是犯错,这样会更好

 let pre = Locale.preferredLanguages[0]
 if pre == NSLocale.something.ENGLISH
    ....
  else if pre == NSLocale.something.SPANISH
    ....
  else if pre == //and so on
    ....

但我找不到任何东西。

这是正确的代码方式吗?

1 个答案:

答案 0 :(得分:0)

For the languages that you plan to support in your app, create an enum that maps the preferredLanguages to an enum case. The snipped below adds cases for english and Spanish.

Limit  (cost=0.44..18.79 rows=10 width=59)
  ->  Index Scan using i_t_table_d_tjrq on t_table  (cost=0.44..32135085.58 rows=17507700 width=59)

Extend // Create an enum that maps known language "Strings" to a case statement. public enum LanguageMap : String{ // Add a case for all the languages you app will support case English = "en" case Spanish = "es" } to add a property that will return an Locale objects instead of [LanguageMap].

[String]

In your application, replace the // Extend the Locale class to return extension Locale{ public static var preferredLanguageMap : [LanguageMap] { let langMap = Locale.preferredLanguages.flatMap({return LanguageMap.init(rawValue: $0) }) return langMap } } statement with a switch case statement.

if-else