tôi có chức năng sau đây để tìm và làm nổi bật hashtags hoặc đề cập (@ hay #) trong một UILabel
:Làm cách nào để tô sáng văn bản trong chuỗi chứa biểu tượng cảm xúc trong 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)
}
}
}
Nếu tôi vượt qua một hashtag (#)(\\w+)
hoặc đề cập đến (@)(\\w+)
mẫu mã hoạt động hoàn hảo nhưng nếu văn bản có chứa một Emoji phạm vi được bù đắp bởi số lượng các biểu tượng cảm xúc trước nó:
tôi biết xử lý chuỗi Swift cách khác nhau để Objective-C, vì count(string)
và count(string.utf16)
cho tôi kết quả khác nhau, nhưng tôi stumped như thế nào để giải thích cho điều này khi sử dụng một biểu thức chính quy.
Tôi chỉ có thể kiểm tra sự khác biệt giữa 2 lần đếm và bù lại phạm vi, nhưng điều này có vẻ sai và gây hại cho tôi. Phải có một cách khác.
Hoạt động hoàn hảo! Cảm ơn bạn. Tôi chắc chắn có một cách để làm điều này mà không dựa vào 'NSString' nhưng điều này hoạt động và tôi không nghĩ rằng' NSString' sẽ sớm diễn ra. –
@MichaelGaylord: Bạn đã khơi dậy tham vọng của tôi, xem câu trả lời cập nhật :) –
@MartinR thật tuyệt vời! Cám ơn vì đã chia sẻ! làm việc như một say mê! – Andres