我正在尝试创建一个函数,其中对多行字符串进行拼写检查,并返回单个 SwiftUI Text() 视图,其中任何拼写错误的单词都以红色突出显示。
我几乎已经通过用换行符拆分字符串,然后用空格拆分行,然后检查每个单词来破解它。
我的主要问题是我在结果文本视图的末尾添加了一个额外的新行。无论如何我可以修剪最后一个Text("\n")
或防止它被添加到最后一行?
此外,是否有任何方法可以提高效率,因为由于数组中的大量文本被检查而引入了轻微的滞后,因此该函数被多次调用?
提前谢谢了
func formatText(multiLineText: String) -> Text {
let lineArray = multiLineText.components(separatedBy: .newlines)
let stringToTextView = lineArray.reduce(Text(""), {
return $0 + formatLineText(singleLineText: $1) + Text("\n")
})
return stringToTextView
}
func formatLineText(singleLineText: String) -> Text {
let stringArray = singleLineText.components(separatedBy: .whitespaces)
let stringToTextView = stringArray.reduce(Text(""), {
if !wordIsValid(word: $1) {
return $0 + Text($1).foregroundColor(Color.red).underline() + Text(" ")
}
else {
return $0 + Text($1) + Text(" ")
}
})
return stringToTextView
}
func wordIsValid(word: String) -> Bool {
let checker = UITextChecker()
let range = NSRange(location: 0, length: word.utf16.count)
let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en_GB")
return misspelledRange.location == NSNotFound
}