Swift 1.2 NSTextStorage removeAttribute with Range<String.Index>

Swift 1.2 NSTextStorage removeAttribute with Range<String.Index>

我有一个 NSTextStorage 的子类,我正在尝试通过以下方式删除段落的前景色:

var paragraphRange = self.string.paragraphRangeForRange(
        advance(self.string.startIndex, theRange.location)..advance(self.string.startIndex, theRange.location + theRange.length))

self.removeAttribute(NSForegroundColorAttributeName, range: paragraphRange)

但是,我得到以下错误Cannot invoke 'removeAttribute' with an argument list of type '(String, range: (Range<String.Index>))'

请帮助。我认为 Swift 上的 TextKit 是一团糟。一些方法 receive/return NSRange 但 String 与 Range<String.Index> 一起工作,因此很难使用。

这里的问题是 self.string 返回的 NSString 自动桥接到 Swift String。一个可能的解决方案是 将其显式转换回 NSString

func removeColorForRange(theRange : NSRange) {
    let paragraphRange = (self.string as NSString).paragraphRangeForRange(theRange)
    self.removeAttribute(NSForegroundColorAttributeName, range: paragraphRange)
}

另请注意,范围运算符 .. 已替换为 ..< 在较新的 Swift 版本中(以避免与 ... 混淆并 强调不包括上限)。