Swift String'deki bazı aralıklara öznitelikleri eklemeye çalışıyorum. Alt dizede birinci ve son sembol aralıklarını buldum ve aralarındaki metni (dahil) kırmızı olarak renklendiriyorum.Swift'de NSAttributedString'de String'den daha fazla karakter var mı?
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
}
Ama String ve NSMutableAttributedString aralıklar eşit değildir bulundu. Dize'deki Aralık daha kısadır (bu metin Unicode kodlamasında değildir). Temel Dize'de olmayan aralıkları bulmanın bir yolu var mı, NSAttributedString'de doğru bulmak için mi?
Örnek:
print(mutableString.length) //550
print(mutableString.string.characters.count) //548
Neden bu fark nedir?
"bu metin Unicode kodlamada değil" _that_ anlamı nedir? – matt
Bu Windows CP1251 kodlaması –
"Bu, Windows CP1251 kodlamasıdır" Eh, hayır öyle değil. Bir String Unicode'dir. Dizeyi oluştururken Windows CP1251'den dönüştürülmüş olmalısınız. Şu an sahip olduğunuz şey bir karmaşa olabilir. – matt