首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift NSLocale编程常量

Swift NSLocale编程常量
EN

Stack Overflow用户
提问于 2017-12-18 00:44:35
回答 1查看 185关注 0票数 0

有没有更好的方法不使用"en","es“字符串来进行编码呢?

代码语言:javascript
复制
 let pre = Locale.preferredLanguages[0]
 if pre == "en"
    ....
  else if pre == "es"
    ....
  else if pre == "xx"
    ....

我想得到编译时的错误,不要犯错误,这样会更好。

代码语言:javascript
复制
 let pre = Locale.preferredLanguages[0]
 if pre == NSLocale.something.ENGLISH
    ....
  else if pre == NSLocale.something.SPANISH
    ....
  else if pre == //and so on
    ....

但我什么也找不到。

这是正确的编码方式吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-18 16:29:56

对于计划在应用程序中支持的语言,创建将preferredLanguages映射到枚举大小写的枚举。下面的代码片段添加了英语和西班牙语的大小写。

代码语言:javascript
复制
// 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"
}

扩展Locale以添加将返回[LanguageMap]对象而不是[String]的属性。

代码语言:javascript
复制
// 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
    }
}

在应用程序中,将if-else语句替换为switch case语句。

代码语言:javascript
复制
// Your application Logic.

switch Locale.preferredLanguageMap.first! {

case .English :
    print("Do Something the English Way")

case .Spanish :
    print("Do Something the Spanish Way")

default:
    print("Do Anything... Throw an error/Default Handling.")
    // Note : Locale.availableIdentifiers has 789 language identifiers till date.
    // This could also change in the future.
    // Ensure you have some default logic for all 'other languages' here.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47857263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档