在NSAttributed
类型语句中,我希望保留现有的属性值并为其赋予新的属性值。
问题是replacingOccurrences
只能用于字符串类型,因为我想在每个单词出现在整个句子中时给出一个新值。
如果我将NSAttributedString
更改为字符串类型,则会删除属性值。我必须保留现有的价值观。
我该怎么做?
答案 0 :(得分:0)
您可以使用replaceCharacters。您可以找到要删除的子字符串的范围,并将其用作范围。
答案 1 :(得分:0)
要实现这一目标,
1。首先,您需要查找字符串中存在的所有重复子字符串的索引。为此,您可以使用:https://stackoverflow.com/a/40413665/5716829
extension String {
func indicesOf(string: String) -> [Int] {
var indices = [Int]()
var searchStartIndex = self.startIndex
while searchStartIndex < self.endIndex,
let range = self.range(of: string, range: searchStartIndex..<self.endIndex),
!range.isEmpty
{
let index = distance(from: self.startIndex, to: range.lowerBound)
indices.append(index)
searchStartIndex = range.upperBound
}
return indices
}
}
2. 接下来,您需要在每个索引处将所需属性应用于子字符串,即
let str = "The problem is that replacingOccurrences Hello is only possible for string types, as I want to give Hello a new value every time Hello the word appears in the entire sentence Hello."
let indices = str.indicesOf(string: "Hello")
let attrStr = NSMutableAttributedString(string: str, attributes: [.foregroundColor : UIColor.blue])
for index in indices
{
//You can write your own logic to specify the color for each duplicate. I have used some hardcode indices
var color: UIColor
switch index
{
case 41:
color = .orange
case 100:
color = .magenta
case 129:
color = .green
default:
color = .red
}
attrStr.addAttribute(.foregroundColor, value: color, range: NSRange(location: index, length: "Hello".count))
}
<强>截图:强>
如果您仍然遇到任何问题,请告诉我。快乐的编码..