检测 UITextField 中的提及不起作用

Detecting mentions in UITextField not working

我正在尝试检测 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 的内容是什么,这让我意识到我清空了在我到达那一点之前的文本字段。

你在我用来从字符串中检测心理文本的扩展名下面。

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
        }
    }

您的 commentTextField 可能 是空的 。检查您是否在任何地方清除文本字段。如果为空,components(separatedBy: CharacterSet.whitespacesAndNewlines) 将 return 一个空字符串 "".