这个函数在Swift中从字符串中提取主题标签有什么问题?

use*_*930 0 nsstring swift

我有这个扩展名:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从任何给定的文本中获取一组主题标签.我有一个UITextView包含文字:

write anything here... #one #two three #four
Run Code Online (Sandbox Code Playgroud)

我希望有一个输出:

["one", "two", "four"]
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

print(myTextView.text.seperateHashtags("#"))
Run Code Online (Sandbox Code Playgroud)

我越来越:

["write anything here... ", "#one ", "#two three ", "#four"]
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Nir*_*v D 5

您可以使用正则表达式并以这种方式获取所有标签:

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)))
}
Run Code Online (Sandbox Code Playgroud)

输出:

["one", "two", "four"]
Run Code Online (Sandbox Code Playgroud)