2015-11-30 10 views
1

У меня есть UITextField, где пользователи могут написать описание.Обнаружить хэштеги и добавить в массив

Пример: «Это изображение моего # автомобиля. Крутой фона #sunshine также для моего #fans».

Как я могу обнаружить хэштеги «автомобиль», «солнечный свет» и «фанаты» и добавить их в массив?

+1

насчет '# fans'? –

+0

@ BartłomiejSemańczyk - Да, я забыл об этом, но вы все еще понимаете? –

+0

Прочтите эту ссылку: http://stackoverflow.com/questions/24359972/detect-hash-tags-mention-tags-in-ios-like-in-twitter-app –

ответ

3
let frame = CGRect(x: 0.0, y: 0.0, width: 100.0, height: 30.0) 

let description = UITextField(frame: frame) 
description.text = "This is a image of my #car. A cool #sunshine background also for my #fans." 


extension String { 
    func getHashtags() -> [String]? { 
     let hashtagDetector = try? NSRegularExpression(pattern: "#(\\w+)", options: NSRegularExpressionOptions.CaseInsensitive) 
     let results = hashtagDetector?.matchesInString(self, options: NSMatchingOptions.WithoutAnchoringBounds, range: NSMakeRange(0, self.utf16.count)).map { $0 } 

     return results?.map({ 
      (self as NSString).substringWithRange($0.rangeAtIndex(1)) 
     }) 
    } 
} 

description.text?.getHashtags() // returns array of hashtags 

Источник: https://github.com/JamalK/Swift-String-Tools/blob/master/StringExtensions.swift

+0

Есть нулевые причины, чтобы использовать сторонний кусок мусора для чего-то, что легко сделать изначально. – Loxx

+0

Вот два вызова, которые вам нужны для «хэш-тегов» sh * t после поиска этих элементов с использованием регулярных выражений. Я никогда не пойму, почему вам нужно использовать кусочек мусора Github, альтернативный тому, что требуется для развертывания двух строк кода: \t \t [attString addAttribute: NSUnderlineStyleAttributeName значение: [NSNumber numberWithInt: NSUnderlineStyleSingle]: NSMakeRange (wordRange.location +1, wordRange.length-1)]; \t \t [attString addAttribute: NSLinkAttributeName значение: @ "http://www.google.com" диапазон: wordRange]; – Loxx

+0

@ Larcerax - позаботьтесь о том, почему ваш фрагмент кода является произведением искусства, а опубликованное выше - sh * t? Не уверен, понимаете ли вы, что на самом деле означает третье лицо. Ваш код является третьим лицом, как тот, который выложен выше для тех, кто хочет его использовать! –

0

Проверить этот стручок: https://cocoapods.org/pods/twitter-text

В TwitterText классе есть метод (NSArray *)hashtagsInText:(NSString *)text checkingURLOverlap (BOOL)checkingURLOverlap

Twitter создал этот стручок для поиска #, @ URL, так на мой взгляд нет лучшего способа сделать это. :)

0

Swift 3 версия @ ответ Анураг в:

extension String { 
func getHashtags() -> [String]? { 
    let hashtagDetector = try? NSRegularExpression(pattern: "#(\\w+)", options: NSRegularExpression.Options.caseInsensitive) 
    let results = hashtagDetector?.matches(in: self, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, self.characters.count)).map { $0 } 

    return results?.map({ 
     (self as NSString).substring(with: $0.rangeAt(1)) 
    }) 
} 

}