UITextView 在数据库中搜索关键字

UITextView searching for keywords in a database

我想检查用户是否在 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()
    }
}

我知道这是一个非常具体的功能,所以任何关于如何实现它的想法都将不胜感激。

您可以分离字符串并尝试将其转换为 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)
    }

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

在你的情况下,正则表达式应该看起来像 "([A-Za-z]\w+ [1-9]\.[1-9]*) "(注意末尾的 space)

然后在你的 textViewDidChange 中,只要文本与正则表达式匹配,你就可以触发你的获取方法,考虑到最后有一个 space 它只会在用户按下时触发space如你所说。

这是一个 link 来试试你的正则表达式:https://regexr.com/

下面是在 swift 中使用正则表达式的示例: