2015-04-12 1 views
2

У меня есть подкласс NSTextStorage, и я стараюсь, чтобы удалить цвет переднего плана абзаца следующим образом:Swift 1,2 NSTextStorage removeAttribute с Range <String.Index>

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

Помогите пожалуйста. Я думаю TextKit на Swift - беспорядок. Некоторые методы принимают/возвращают NSRange, но String работает с Range<String.Index>, заставляя его работать.

ответ

3

Проблема здесь состоит в том, что NSString возвращаемый self.string автоматически мостиком к Swift String. Возможное решение преобразовать его обратно в NSString явно:

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

Заметим также, что оператор диапазона .. был заменен ..< в новых Swift версий (чтобы избежать путаницы с ... и подчеркнуть, что верхняя связанный не включен).