2016-05-04 67 views
1

在swift2中,StringendIndexcount怎麼可能不同?它是我用過的代碼示例。當所有的字符都是英文的時候,它不會發生。字符串的`endIndex`和`count`是不同的

print("count:",self.Label.text!.characters.count) 
    print("endIndex:",self.Label.text!.characters.endIndex) 
    print("String:",self.Label.text!) 

輸出:

count: 32 
endIndex: 34 
String: • (دستور زبان) مفعول‌به، مفعول‌عنه 
+0

什麼關於SWIFT 3? –

回答

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() 
    } 

結果

String: ìòè 
count: 3 
endIndex: 6 
0:ì 
2:ò 
4:è 
+0

你知道我如何獲得角色的秩序?我的意思是在你的示例中得到2的索引爲4è – alizx

+1

使用'distanceTo()'獲取兩個索引之間的字符數。 'startIndex.distanceTo(i)'返回索引「4」的「2」。使用'advanceBy()'將索引增加一定數量的字符。 – Darren

+0

我有一個整型表格layoutManager.characterIndexForPoint(...)我不知道如何將其轉換爲Sting.Index類型 – alizx

相關問題