Ho la seguente funzione per trovare ed evidenziare hashtag o menzioni (@ o #) in un UILabel
:Come si evidenzia il testo in una stringa che contiene emoji in Swift?
class func addLinkAttribute(pattern: String,
toText text: String,
withAttributeName attributeName : String,
toAttributedString attributedString :NSMutableAttributedString,
withLinkAttributes linkAttributes: [NSObject : AnyObject]) {
var error: NSError?
if let regex = NSRegularExpression(pattern: pattern, options:.CaseInsensitive, error: &error) {
regex.enumerateMatchesInString(text, options: .allZeros, range: NSMakeRange(0, count(text))) { result, flags, stop in
let range = result.range
let start = advance(text.startIndex, range.location)
let end = advance(start, range.length)
let foundText = text.substringWithRange(Range<String.Index>(start: start,end: end))
var linkAttributesWithName = linkAttributes
linkAttributesWithName[attributeName] = foundText
attributedString.addAttributes(linkAttributesWithName, range: range)
}
}
}
Se mi passa un hashtag (#)(\\w+)
o citare (@)(\\w+)
modello il codice funziona perfettamente, ma se il testo contiene un emoji la gamma è compensato dal numero di emoji che lo precede:
so Tratta Swift stringhe in modo diverso a Objective-C, dal momento che count(string)
e count(string.utf16)
mi danno risultati diversi, ma sono perplesso su come tener conto di ciò quando si usa un'espressione regolare.
Potrei semplicemente controllare la differenza tra i 2 conteggi e compensare l'intervallo, ma questo mi sembra sbagliato e intrusivo. Deve esserci un altro modo.
Funziona perfettamente! Grazie. Sono sicuro che c'è un modo per farlo senza fare affidamento su 'NSString', ma questo funziona e non credo che' NSString' stia andando da qualche parte presto. –
@ MichaelGaylord: hai suscitato la mia ambizione, vedi risposta aggiornata :) –
@ Martin fantastico! Grazie per la condivisione! funziona come un fascino! – Andres