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 版本中(以避免与 ...
混淆并
强调不包括上限)。
我有一个 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 版本中(以避免与 ...
混淆并
强调不包括上限)。