将我的Mac更新到OSX Sierra之后,我注意到,NSLocale.preferredLanguages()
数组现在采用不同的格式(请参阅快速解释here)
此外,对于IOS9,我想也是如此。
所以,简而言之,以前我们有语言格式“en”,“fr”,“ru”,e.t.c
现在,我们的格式为“en-US”,“en-RU”,“fr-US”e.t.c。
在我的应用程序中,某些控件的坐标与区域设置相关。现在,由于格式不同,它们都错了。我正在考虑解决这个问题的最佳方法,并继续支持旧版本。
所以,我的问题是:
有没有办法只接收没有区域代码的语言代码?快速而肮脏的解决方案是从该字符串中读取前两个符号。有更优雅的吗?
P.S。有人可以向我解释Apple的逻辑。我的意思是,为什么他们已经决定,最好的选择是改变现有的对象格式(打破向后兼容性)而不是向NSLocale添加额外的字段?
答案 0 :(得分:1)
您可以按如下方式使用substringToIndex
:
let str = "en-US"
if let indexOfDash = str.characters.indexOf("-") {
let langCode = str.substringToIndex(indexOfDash)
}
这种方式如果语言代码因任何原因而长于2个字符,你就不会被抓住。
答案 1 :(得分:1)
使用
<强> swift3 强>
let splitArray = "en-US".components(separatedBy: "-") you get // ["en", "US"]
低于swift3
let splitArray = "en-US".componentsSeparatedByString("-") // ["en", "US"]