在UITextField中检测到提及内容无效

时间:2018-08-20 10:02:53

标签: swift uitextfield

我正在尝试检测@中的提及(使用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的内容,这使我意识到,在到达之前,我先清空了文本字段的内容。那一点。

2 个答案:

答案 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)将返回一个空字符串“”。