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)
}
}
Dies erzeugt Werte vom Typ Bereich
bpedit
@bpedit Dies sollte es beheben, NSRange API ist ein wenig anders - keine "süße" eingebaute Unterstützung vom Compiler. – dasblinkenlight
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