我正在嘗試創建一個函式,其中對多行字串進行拼寫檢查,并回傳單個 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
}
uj5u.com熱心網友回復:
您可以.enumerated在 your中使用reduce來檢查該專案是否是最后一個 - 如果是,請不要回傳\n.
func formatText(multiLineText: String) -> Text {
let lineArray = multiLineText.components(separatedBy: .newlines)
let stringToTextView = lineArray.enumerated().reduce(Text(""), { (acc,item) in
return acc formatLineText(singleLineText: item.1) Text(item.0 != lineArray.endIndex - 1 ? "\n" : "")
})
return stringToTextView
}
在性能方面,我let checker = UITextChecker()會將其移至不會在每次呼叫時都重新創建的地方wordIsValid
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/426043.html
上一篇:非邏輯運算子
