在UITableView中,我列出了一堆要选择的语言。并且像在“联系人”应用程序中那样将部分索引视图放在右侧,我将获得列表中所有语言的首字母,然后使用它来生成部分索引视图。
它几乎完美无缺,我遇到了希伯来语中第一个字符串的问题。这里有一个来自游乐场的截图,这是我无法得到第一个字母的语言名称之一:
问题是,具有“ina”语言代码的语言名称的第一个字母不是“א”,它是一个空字符;它不是一个空间,它只是一个空洞的角色。正如你所看到的,它实际上总共有12个字符,但是当我计算它时,它会显示13个字符,因为索引0中有一个非空格的空字符。
如果我使用“eng”或“ara”语言将这些值放在value:参数中,它的效果非常好。所以问题可能是系统在某些情况下返回带有空字符的语言名称的原因,我不知道。
我尝试了一些获得第一个字母的不同方法,但其中任何一个都没有用。
这里“א”不是第一个字母,而是第二个字母。所以我想也许我可以找到一个简单的黑客,但我想在尝试解决方法之前尝试解决它。
以下是代码:
let locale = NSLocale(localeIdentifier: "he")
let languageName = locale.displayNameForKey(NSLocaleIdentifier, value: "ina")!
let firstLetter = first(languageName)!
println(countElements(languageName))
for character in languageName {
println(character)
}
答案 0 :(得分:2)
您可以使用NSCharacterSet.controlCharacterSet()
来测试每个角色。我无法弄清楚如何保留Swift本地字符串,但这是一个使用NSString
返回第一个非控制字符的函数:
func firstNonControlCharacter(str: NSString) -> String? {
let controlChars = NSCharacterSet.controlCharacterSet()
for i in 0..<str.length {
if !controlChars.characterIsMember(str.characterAtIndex(i)) {
return str.substringWithRange(NSRange(location: i, length: 1))
}
}
return nil
}
let locale = NSLocale(localeIdentifier: "he")
let languageName = locale.displayNameForKey(NSLocaleIdentifier, value: "ina")!
let firstChar = firstNonControlCharacter(languageName) // Optional("א")