2016-07-24 6 views
3

У меня есть 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) 
    } 
} 

ответ

2

Вам не придется прибегать к численным диапазонам, но вам не нужно прибегать к петле:

// atStr is mutable attributed string 
// str is the input string 
atStr.beginEditing() 
var pos = NSRange(location: 0, length: atStr.length) 
while true { 
    let next = atStr.rangeOfString(target, options: .LiteralSearch, range: pos) 
    if next.location == NSNotFound { 
     break 
    } 
    atStr.addAttributes(boldAttribs, range: next) 
    print(next) 
    pos = NSRange(location: next.location+next.length, length: atStr.length-next.location-next.length) 
} 
atStr.endEditing() 
+0

Это дает значение типа Range bpedit

+0

@bpedit Это должно исправить, API NSRange немного отличается - никакой «симпатичной» встроенной поддержки от компилятора. – dasblinkenlight

+0

Не работает. 'NSMutableString' не имеет члена' диапазон строки'. Я бы очень хотел использовать мою Swift 'String' там (' str' для 'atStr'), но я получаю ту же самую проблему с конверсией, что и первый раунд. – bpedit

Смежные вопросы