我正在尝试检测@
中的提及(使用UITextField
)。基本上,我想做的是将用户输入的文本String
转换为array
,然后遍历每个项目以查看是否有@
前缀。出于某种原因,尽管我在提及(或仅提及)周围输入了较长的文本,但它显示1个项目为空字符串。我显然做错了,但我不知道是什么
if let mentionsArray = self.commentTextField.text?.components(separatedBy: CharacterSet.whitespacesAndNewlines) {
for mention in mentionsArray {
if mention.hasPrefix("@") {
print(mention)
}
}
}
值得一提的是,这段代码是在闭包内部运行的。
更新:该代码实际上正在运行,但是下面的注释询问了commentTextField.text
的内容,这使我意识到,在到达之前,我先清空了文本字段的内容。那一点。
答案 0 :(得分:2)
您下面的扩展名是我用来从字符串中检测提示文本的。
extension String {
func findMentionText() -> [String] {
var arr_hasStrings:[String] = []
let regex = try? NSRegularExpression(pattern: "(@[a-zA-Z0-9_\\p{Arabic}\\p{N}]*)", options: [])
if let matches = regex?.matches(in: self, options:[], range:NSMakeRange(0, self.count)) {
for match in matches {
arr_hasStrings.append(NSString(string: self).substring(with: NSRange(location:match.range.location, length: match.range.length )))
}
}
return arr_hasStrings
}
}
答案 1 :(得分:1)
您的commentTextField
可能为空。检查是否在任何地方清除了文本字段。如果为空,components(separatedBy: CharacterSet.whitespacesAndNewlines)
将返回一个空字符串“”。