Swift NSLocale编程常量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift NSLocale编程常量相关的知识,希望对你有一定的参考价值。

有没有更好的方法来编码,而不使用魔术“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
    ....

但我找不到任何东西。

这是正确的代码方式吗?

答案

对于您计划在应用中支持的语言,请创建一个枚举,将preferredLanguages映射到枚举大小写。下面的剪辑添加了英语和西班牙语的案例。

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

// 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语句。

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

以上是关于Swift NSLocale编程常量的主要内容,如果未能解决你的问题,请参考以下文章

Swift 格式化库 Format

在 Swift 中以编程方式更新约束的常量属性?

swift 学习笔记之---常量与变量

如何在 swift 3 中获取 systemLocaleCountryCode?

《从零开始学Swift》学习笔记(Day58)—— Swift编码规范之变量或常量声明规范

Swift - 日期字符串比较