2016-07-24 20 views
3

Ich habe arrays enthält Strings der Text Begriffe, auf die ich ein bestimmtes Attribut anwenden möchte. Hier ist ein Code snippit:Schnell. Hinzufügen von Attributen zu mehreren Instanzen

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

Dies funktioniert gut für einzelnen Begriff oder Satz verwenden. Aber es gilt nur für die erste Verwendung eines bestimmten Begriffs. Gibt es einen Weg, ohne auf numerische Bereiche zurückzugreifen, das Attribut auf alle Instanzen desselben Begriffs anzuwenden? Zum Beispiel, verwenden Sie alle "animation button" innerhalb der gleichen Zeichenfolge fett.

Edit: Das funktioniert.

// `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) 
    } 
} 

Antwort

2

Sie müssen nicht auf numerische Bereiche zurückgreifen, aber Sie tun müssen, um eine Schleife greifen:

// 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

Dies erzeugt Werte vom Typ Bereich bpedit

+0

@bpedit Dies sollte es beheben, NSRange API ist ein wenig anders - keine "süße" eingebaute Unterstützung vom Compiler. – dasblinkenlight

+0

funktioniert auch nicht. 'NSMutableString' hat kein Mitglied' string'. Ich würde wirklich gerne meinen Swift 'String' verwenden (' str' für 'atStr'), aber ich bekomme das gleiche Konvertierungsproblem wie beim ersten Durchlauf. – bpedit