我想在Swift字符串中添加一些範圍的屬性。 我在子串中找到了第一個和最後一個符號的範圍,並將它們之間的文本(包括)以紅色着色。在Swift NSAttributedString比字符串有更多的字符?
let mutableString = NSMutableAttributedString(string: text)
let str = mutableString.string
//Red symbols
var t = 0
let symbols = mutableString.string.characters.count
while t < symbols {
if str[t] == "[" {
let startIndex = t
while str[t] != "]" {
t += 1
}
t += 1
let endIndex = t
mutableString.addAttribute(
NSForegroundColorAttributeName,
value: UIColor.redColor(),
range: NSMakeRange(startIndex, endIndex - startIndex))
}
t += 1
}
但我發現String和NSMutableAttributedString中的範圍不相等。字符串中的範圍更短(此文本不是Unicode編碼)。 有沒有一種方法來找到範圍不在基礎字符串,但在NSAttributedString中找到它正確?
例子:
print(mutableString.length) //550
print(mutableString.string.characters.count) //548
爲什麼這種差異?
「此文本不是Unicode編碼」_that_是什麼意思? – matt
是Windows CP1251編碼 –
「是Windows CP1251編碼」好吧,不是。一個字符串是Unicode。創建字符串時,您應該從Windows CP1251轉換而來。你現在擁有的東西可能會是一團糟。 – matt