Как добавить определенные атрибуты в NSAttributedString в Swift

Это простой вопрос, но он ошибочен в нескольких местах, поэтому я думаю, что есть кое-что, чего я просто не получаю (и это приложение для коллег, которого здесь больше нет). Я перенес приложение Objective-C в Swift и у меня возникли проблемы с NSAttributedString.

Существует note.body, которое устанавливается в NSMutableAttributedString, и каждая заметка имеет массив строк.frags, которые являются разделами, к которым мы хотим добавить атрибуты.

Я имею:

var attrs = [NSFontAttributeName : UIFont.systemFontOfSize(9.0)]
var gString = NSMutableAttributedString(string:note.body, attributes:attrs)  // say note.body="birds and bees"

let firstAttributes = [NSForegroundColorAttributeName: UIColor.blueColor(), NSBackgroundColorAttributeName: UIColor.yellowColor(), NSUnderlineStyleAttributeName: 1]
for (val) in note.frags {  // say note.frags=["bees"]
  let tmpVal = val
  gString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: gString.string.rangeOfString(tmpVal))
}

Как бы я добавил первые атрибуты?

Я получаю ошибку:

Невозможно вызвать addAttribute со списком аргументов типа '(String, value: Int, range: Range?)'

1 ответ

Решение

Проблема в том, что вы вызываете метод с Range? параметр, когда NSRange ожидается.

Чтобы убедиться, что вы получите NSRangeвам нужно будет конвертировать String в NSString первый.

Этот код работает на игровой площадке:

for val in note.frags {  // say note.frags=["bees"]
    let range: NSRange = NSString(string: gString.string).rangeOfString(val)
    gString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: range)
}
Другие вопросы по тегам