是否有任何特定的API来获取角色的下一个字母?
示例:
如果
"Somestring".characters.first
导致"S"
,那么应该 返回"T"
如果没有,我想我必须迭代一个字母表集合并按顺序返回下一个字符。或者还有其他更好的解决方案吗?
答案 0 :(得分:4)
如果你想到拉丁语大写字母“A”...“Z”那么 以下应该有效:
func nextLetter(_ letter: String) -> String? {
// Check if string is build from exactly one Unicode scalar:
guard let uniCode = UnicodeScalar(letter) else {
return nil
}
switch uniCode {
case "A" ..< "Z":
return String(UnicodeScalar(uniCode.value + 1)!)
default:
return nil
}
}
如果有,则返回下一个拉丁大写字母,
否则nil
。它起作用,因为拉丁大写字母
具有连续的Unicode标量值。
(请注意UnicodeScalar(uniCode.value + 1)!
不能失败
范围。)guard
语句处理多个字符
字符串和扩展的字形集群(例如标志“”)。
您可以使用
case "A" ..< "Z", "a" ..< "z":
如果还应覆盖小写字母。
示例:
nextLetter("B") // C
nextLetter("Z") // nil
nextLetter("€") // nil
答案 1 :(得分:4)
func nextChar(str:String) {
if let firstChar = str.unicodeScalars.first {
let nextUnicode = firstChar.value + 1
if let var4 = UnicodeScalar(nextUnicode) {
var nextString = ""
nextString.append(Character(UnicodeScalar(var4)))
print(nextString)
}
}
}
nextChar(str: "A") // B
nextChar(str: "ζ") // η
nextChar(str: "z") // {