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 中使用正则表达式的示例:
我想检查用户是否在 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 中使用正则表达式的示例: