У меня есть arrays
, содержащий строки текстовых терминов, к которым я хочу применить определенный атрибут. Ниже приведен фрагмент кода:Swift. Добавление атрибутов к нескольким экземплярам
static var bold = [String]()
static let boldAttribs = [NSFontAttributeName: UIFont(name: "WorkSans-Medium", size: 19)!]
for term in bold {
atStr.addAttributes(boldAttribs, range: string.rangeOfString(term))
}
Это отлично подходит для использования в одиночку или фразе. Но это относится только к первому использованию определенного термина. Есть ли способ, не прибегая к числовым диапазонам, применять атрибут ко всем экземплярам того же термина? Например, сделайте каждое использование «кнопки анимации» в пределах одной строки жирным шрифтом.
Редактировать: Это работает.
// `butt2` is [String]() of substrings to attribute
// `term` is String element in array, target of attributes
// `string` is complete NAString from data
// `atStr` is final
for term in butt2 {
var pos = NSRange(location: 0, length: string.length)
while true {
let next = string.rangeOfString(term, options: .LiteralSearch, range: pos)
if next.location == NSNotFound { break }
pos = NSRange(location: next.location+next.length, length: string.length-next.location-next.length)
atStr.addAttributes(butt2Attribs, range: next)
}
}
Это дает значение типа Range
bpedit
@bpedit Это должно исправить, API NSRange немного отличается - никакой «симпатичной» встроенной поддержки от компилятора. – dasblinkenlight
Не работает. 'NSMutableString' не имеет члена' диапазон строки'. Я бы очень хотел использовать мою Swift 'String' там (' str' для 'atStr'), но я получаю ту же самую проблему с конверсией, что и первый раунд. – bpedit