UITextView поиск ключевых слов в базе данных - PullRequest
1 голос
/ 23 мая 2019

Я хочу проверить, вводит ли пользователь конкретные фразы в 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 ]

1 голос
/ 23 мая 2019

Попробуйте взглянуть на регулярное выражение (REGEX).

В вашем случае регулярное выражение должно выглядеть как "([A-Za-z]\w+ [1-9]\.[1-9]*) " (обратите внимание на пробел в конце)

Затем в вашем textViewDidChange, как только текст совпадет с регулярным выражением, вы можете активировать свой метод извлечения, и, учитывая, что в конце есть пробел, он сработает только тогда, когда пользователь нажмет пробел, как вы сказали.

Вот ссылка для проверки вашего регулярного выражения: https://regexr.com/

А вот пример использования регулярных выражений в swift: https://stackoverflow.com/a/27880748/5464805

0 голосов
/ 23 мая 2019

Вы можете отделить строку и попытаться привести ее к 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)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...