UITextView在数据库中搜索关键字

时间:2019-05-23 05:39:50

标签: ios swift uitextview uitextviewdelegate

我想检查用户是否在科学应用的UITextView中键入特定的短语。我有这个当前代码,该代码创建最后20个字符的字符串,然后检查该字符串是否包含arrayOfWords中的单词,该单词在textViewDidChange上执行:

var arrayOfWords = [“Gold", “Phosphorus”]

func textViewDidChange(_ textField: UITextView) {
    if let selectedRange = textView.selectedTextRange {
        let cursorPosition = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start)
        let startRange = cursorPosition - 20
        let result = textView.text.substring(from: startRange, to: cursorPosition)

        checkIfContains(textViewString: result)
    }}

func checkIfContains(textViewString: String)  {
    if arrayOfWords.contains(where: textViewString.contains) {
        doAction()
    }
}

我知道这是一个非常具体的功能,因此任何有关如何实现这一目标的想法将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试查看正则表达式(REGEX)。

在您的情况下,正则表达式应类似于"([A-Za-z]\w+ [1-9]\.[1-9]*) "(请注意末尾的空格)

然后在textViewDidChange中,一旦文本与正则表达式匹配,您就可以触发获取方法,并且考虑到最后有空格,只有当用户按您所说的空格键时才会触发。

这里是尝试您的正则表达式的链接:https://regexr.com/

这是在swift中使用正则表达式的示例:https://stackoverflow.com/a/27880748/5464805

答案 1 :(得分:0)

您可以分隔字符串,然后尝试将其强制转换为Float:

    let someText = "here will be text from textView 3.5"
    let arrayOfWords = someText.split(separator: " ")

    // more than two words? if not, exit
    guard arrayOfWords.count >= 2 else { return }

    // now you can check if last `word` ca be a Float
    let last = String(arrayOfWords.last ?? "")
    if let number = Float(last), let wordBefore = arrayOfWords[arrayOfWords.count - 2] {
        // here you have number
        print(number)

        // here word before
        print(wordBefore)
    }