2016-09-28 19 views
0

我有这样的扩展:这个函数从Swift中的字符串中提取hashtags有什么问题?

extension String { 
    public func seperateHashtags(char : String) -> [String]{ 
     var word : String = "" 
     var words : [String] = [String]() 
     for chararacter in self.characters { 
      if String(chararacter) == char && word != "" { 
       words.append(word) 
       word = char 
      }else { 
       word += String(chararacter) 
      } 
     } 
     words.append(word) 
     return words 
    } 
} 

,我希望能在任何给定的文本得到的井号标签的数组。 我有一个UITextView包含文本:

write anything here... #one #two three #four 

,我希望有一个输出:

["one", "two", "four"] 

,但是当我这样做:

print(myTextView.text.seperateHashtags("#")) 

我越来越:

["write anything here... ", "#one ", "#two three ", "#four"] 

我该如何解决这个问题?

+0

使用调试器。单步执行您的代码。检查变量。该功能不符合你的期望? –

回答

4

您可以使用正则表达式,并得到所有的井号标签像这样:

var hashtags = [String]() 
var str = "#one #two three #four" 
let regex = try NSRegularExpression(pattern: "(#[A-Za-z0-9]*)", options: []) 
let matches = regex.matchesInString(str, options:[], range:NSMakeRange(0, str.characters.count)) 
for match in matches { 
    print("match = \(match.range)") 
    hashtags.append(NSString(string: str).substringWithRange(NSRange(location:match.range.location + 1, length:match.range.length - 1))) 
} 

输出:

["one", "two", "four"] 
+0

hm我只是把它粘贴到我的代码和这行'let regex = try NSRegularExpression(pattern:“(# [A-Za-z0-9] *)“,options:[])'抛出一个错误,说:'从这里抛出的错误没有被处理......这里有什么问题? – user3766930

+0

你需要在'do catch'块中加入。 –

+0

谢谢,它的作品完美! – user3766930

0
write anything here... 

不应该把它作为UITextField的占位符吗?

+0

是的,但除此之外,我可以在那里写任何文本,我仍然认为它被认为是一个主题标签... – user3766930