我想检查用户是否在科学应用的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()
}
}
我知道这是一个非常具体的功能,因此任何有关如何实现这一目标的想法将不胜感激。
答案 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)
}