字符串的`endIndex`和`count`是不同的

ali*_*izx 1 swift swift2

这怎么可能endIndexcount一个String在swift2不同?它是我用过的代码示例.当所有字符都只是英文时,它不会发生.

    print("count:",self.Label.text!.characters.count)
    print("endIndex:",self.Label.text!.characters.endIndex)
    print("String:",self.Label.text!)
Run Code Online (Sandbox Code Playgroud)

输出:

count: 32
endIndex: 34
String: • (????? ????) ????????? ?????????
Run Code Online (Sandbox Code Playgroud)

Dar*_*ren 5

原始值String.CharacterView.Index无关紧要,不应使用.其原始值仅具有String和CharacterView中的含义.

在您的情况下,一些Unicode字符仅仅组合修改相邻字符的字符以形成单个字形.例如,U + 0300,结合严重重音:

    let str = "i\u{0300}o\u{0300}e\u{0300}"

    print("String:",str)
    print("count:",str.characters.count)
    print("endIndex:",str.characters.endIndex)

    var i = str.characters.startIndex
    while i < str.characters.endIndex
    {
        print("\(i):\(str.characters[i])")
        i = i.successor()
    }
Run Code Online (Sandbox Code Playgroud)

结果是

String: ìòè
count: 3
endIndex: 6
0:ì
2:ò
4:è
Run Code Online (Sandbox Code Playgroud)