更改字符串

时间:2015-05-24 09:42:05

标签: ios swift nsattributedstring

我试图更改以@开头的特定单词的颜色但是我在下面的代码中一直收到错误。

从我可以看到它似乎是范围变量的东西。

我收到以下错误:

  

无法调用' addAttribute'使用类型的参数列表(String,   value:UIColor,范围范围?)

代码:

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)
    }
}

2 个答案:

答案 0 :(得分:3)

addAttribute需要NSRange。请尝试使用以下内容:

let range = (message as NSString).rangeOfString(word)

P.S。在可能的情况下,您首选使用let,而不是var

答案 1 :(得分:2)

我不是将字符串拆分成组件,而是使用正则表达式搜索来查找以@开头的字符串范围,然后应用颜色。以下是一个工作示例:

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))。范围和NSRange不可互换,您必须满足其中一个或另一个的要求。使用distance()可以检索所需的Int值以实例化NSRange。