获取角色的下一个字母

时间:2017-02-19 18:37:42

标签: swift

是否有任何特定的API来获取角色的下一个字母?

示例:

  

如果"Somestring".characters.first导致"S",那么应该   返回"T"

如果没有,我想我必须迭代一个字母表集合并按顺序返回下一个字符。或者还有其他更好的解决方案吗?

2 个答案:

答案 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")  // {