Я пытаюсь добавить атрибуты в некоторые диапазоны в Swift String. Я нашел диапазоны первого и последнего символа в подстроке и покрасил текст между ними (в том числе) в красный цвет.В Swift NSAttributedString больше символов, чем String?
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 не равны. Диапазон в String короче (этот текст отсутствует в кодировке Unicode). Есть ли способ найти диапазоны не в базовой строке, а в NSAttributedString, чтобы найти ее правильно?
Пример:
print(mutableString.length) //550
print(mutableString.string.characters.count) //548
Почему эта разница?
«этот текст не в кодировке Юникод» Что означает _that_? – matt
Это кодировка Windows CP1251 –
«Это кодировка Windows CP1251« Ну, нет, это не так. Строка - это Юникод. Вы должны были преобразовать из Windows CP1251 при создании строки. Теперь у вас может быть что-то вроде беспорядка. – matt