Как добавить определенные атрибуты в 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)
}