有没有更好的方法不使用"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
....但我什么也找不到。
这是正确的编码方式吗?
发布于 2017-12-18 16:29:56
对于计划在应用程序中支持的语言,创建将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.
}https://stackoverflow.com/questions/47857263
复制相似问题