更改字符串中特定单词的颜色
Change color of specific words in String
我正在尝试更改以 @
开头的特定单词的颜色,但是我在下面的代码中不断收到错误消息。
据我所知,它似乎与范围变量有关。
我收到以下错误:
cannot invoke 'addAttribute' with an argument list of type (String,
value: UIColor, range Range?)
代码:
var messageMutableString = NSMutableAttributedString(string: message, attributes: [NSFontAttributeName:UIFont(name: "PT Sans", size: 13.0)!])
var words = message.componentsSeparatedByString(" ")
for word in words {
if word.hasPrefix("@") {
var range = message.rangeOfString(word)
messageMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor(rgba: "#B52519"), range: range)
}
}
addAttribute
需要 NSRange
。尝试使用以下内容:
let range = (message as NSString).rangeOfString(word)
p.s。如果可能,最好使用 let
,而不是 var
。
我不会将字符串拆分成多个部分,而是使用正则表达式搜索来查找以 @ 开头的字符串范围,然后应用颜色。下面是一个工作示例:
extension String {
public func getMatches(regex: String, options: NSStringCompareOptions?) -> [Range<String.Index>] {
var arr = [Range<String.Index>]()
var rang = Range(start: self.startIndex, end: self.endIndex)
var foundRange:Range<String.Index>?
do
{
foundRange = self.rangeOfString(regex, options: options ?? nil, range: rang, locale: nil)
if let a = foundRange {
arr.append(a)
rang.startIndex = foundRange!.endIndex
}
}
while foundRange != nil
return arr
}
}
let message = "hello @you how are @you today?"
let matches = message.getMatches("@[^ ]{1,}", options: NSStringCompareOptions.RegularExpressionSearch)
let messageMutableString = NSMutableAttributedString(string: message, attributes: [NSFontAttributeName:UIFont(name: "Helvetica", size: 13.0)!])
for m in matches {
messageMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:distance(message.startIndex,m.startIndex),length:distance(m.startIndex,m.endIndex)))
}
messageMutableString // string with added attributes
范围问题已解决如下:NSRange(location:distance(message.startIndex,m.startIndex),length:distance(m.startIndex,m.endIndex))
。 Range 和 NSRange 不可互换,您必须满足其中一个的要求。使用 distance() 您可以检索所需的 Int 值以实例化 NSRange。
我正在尝试更改以 @
开头的特定单词的颜色,但是我在下面的代码中不断收到错误消息。
据我所知,它似乎与范围变量有关。
我收到以下错误:
cannot invoke 'addAttribute' with an argument list of type (String, value: UIColor, range Range?)
代码:
var messageMutableString = NSMutableAttributedString(string: message, attributes: [NSFontAttributeName:UIFont(name: "PT Sans", size: 13.0)!])
var words = message.componentsSeparatedByString(" ")
for word in words {
if word.hasPrefix("@") {
var range = message.rangeOfString(word)
messageMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor(rgba: "#B52519"), range: range)
}
}
addAttribute
需要 NSRange
。尝试使用以下内容:
let range = (message as NSString).rangeOfString(word)
p.s。如果可能,最好使用 let
,而不是 var
。
我不会将字符串拆分成多个部分,而是使用正则表达式搜索来查找以 @ 开头的字符串范围,然后应用颜色。下面是一个工作示例:
extension String {
public func getMatches(regex: String, options: NSStringCompareOptions?) -> [Range<String.Index>] {
var arr = [Range<String.Index>]()
var rang = Range(start: self.startIndex, end: self.endIndex)
var foundRange:Range<String.Index>?
do
{
foundRange = self.rangeOfString(regex, options: options ?? nil, range: rang, locale: nil)
if let a = foundRange {
arr.append(a)
rang.startIndex = foundRange!.endIndex
}
}
while foundRange != nil
return arr
}
}
let message = "hello @you how are @you today?"
let matches = message.getMatches("@[^ ]{1,}", options: NSStringCompareOptions.RegularExpressionSearch)
let messageMutableString = NSMutableAttributedString(string: message, attributes: [NSFontAttributeName:UIFont(name: "Helvetica", size: 13.0)!])
for m in matches {
messageMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:distance(message.startIndex,m.startIndex),length:distance(m.startIndex,m.endIndex)))
}
messageMutableString // string with added attributes
范围问题已解决如下:NSRange(location:distance(message.startIndex,m.startIndex),length:distance(m.startIndex,m.endIndex))
。 Range 和 NSRange 不可互换,您必须满足其中一个的要求。使用 distance() 您可以检索所需的 Int 值以实例化 NSRange。