我正在嘗試構建一個自動更正系統,因此我需要能夠刪除鍵入的最後一個單詞並將其替換爲正確的單詞。我的解決方案:從Swift中的字符串中有效地刪除最後一個單詞
func autocorrect() {
hasWordReadyToCorrect = false
var wordProxy = self.textDocumentProxy as UITextDocumentProxy
var stringOfWords = wordProxy.documentContextBeforeInput
fullString = "Unset Value"
if stringOfWords != nil {
var words = stringOfWords.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
for word in words {
arrayOfWords += [word]
}
println("The last word of the array is \(arrayOfWords.last)")
for (mistake, word) in autocorrectList {
println("The mistake is \(mistake)")
if mistake == arrayOfWords.last {
fullString = word
hasWordReadyToCorrect = true
}
}
println("The corrected String is \(fullString)")
}
}
此方法在每次擊鍵後調用,並且如果按下該空格,它將更正單詞。當文本字符串長於約20個字時,我的問題就出現了。每次按下某個字符時,需要一段時間才能填充該數組,並且它開始滯後於無法使用它。有沒有更高效和優雅的Swift寫這個函數的方法?我會很感激任何幫助!
黨!您將我的所有代碼簡化爲3行,並且效果更好!如果您想到更多,我會保持打開頁面,但到目前爲止,在我輸入的一個大段落中,我沒有任何問題。雖然我唯一擔心的是,我檢查的字典只有10字左右,因爲這是在完成列表之前進行的測試。如果單詞列表的時間更長,您認爲這段代碼會保持高效嗎? – SomeGuy 2014-10-08 20:40:40
@SomeGuy - 詞典旨在進行優化,因此查找不應過多地抑制性能。據說,擁有一個非常大的字典和每個關鍵筆畫的處理可能會顯示出一些性能問題。我無法找到任何優秀的快速搜索基準,所以我無法確定地說。 – Logan 2014-10-08 20:50:36
有沒有更有效的方法可以讓你想到製作自動更正系統?我剛剛製作了關鍵值對,例如關鍵的東西是價值,所以如果用戶輸入了關鍵字,它就會變成那裏。 – SomeGuy 2014-10-09 03:03:00