Ich versuche, einigen Bereichen in Swift String Attribute hinzuzufügen. Ich habe Bereiche des ersten und letzten Symbols in Teilstrings gefunden und färbe den Text zwischen ihnen (einschließlich) in rot.In Swift hat NSAttributedString mehr Zeichen als 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
}
Aber ich fand, dass Bereiche in String und in NSMutableAttributedString nicht gleich sind. Range in String ist kürzer (dieser Text ist nicht in Unicode-Codierung). Gibt es eine Möglichkeit, Bereiche nicht im zugrunde liegenden String zu finden, sondern in NSAttributedString, um sie korrekt zu finden?
Beispiel:
print(mutableString.length) //550
print(mutableString.string.characters.count) //548
Warum ist dieser Unterschied?
"Dieser Text ist nicht in Unicode-Codierung" Was bedeutet _that_? – matt
Es ist Windows CP1251 Codierung –
"Es ist Windows CP1251 Codierung" Nun, nein ist es nicht. Eine Zeichenfolge ist Unicode. Sie sollten beim Erstellen der Zeichenfolge von Windows CP1251 konvertiert haben. Was Sie jetzt haben, könnte etwas Unordnung sein. – matt