diff --git a/Sources/SymSpellSwift/String+Extension.swift b/Sources/SymSpellSwift/String+Extension.swift index c525626..53dda28 100644 --- a/Sources/SymSpellSwift/String+Extension.swift +++ b/Sources/SymSpellSwift/String+Extension.swift @@ -69,9 +69,3 @@ extension String { return self[start ..< end] } } - -extension Substring { - func removingCharacter(at index: Int) -> Substring { - prefix(index) + dropFirst(index + 1) - } -} diff --git a/Sources/SymSpellSwift/SymSpell.swift b/Sources/SymSpellSwift/SymSpell.swift index af8f0e9..a03eaf0 100644 --- a/Sources/SymSpellSwift/SymSpell.swift +++ b/Sources/SymSpellSwift/SymSpell.swift @@ -252,8 +252,9 @@ class SymSpell { if lengthDiff < maxEditDistance, candidateLen <= prefixLength { if verbosity != .all, lengthDiff >= maxEditDistance2 { continue } - for i in 0 ..< candidateLen { - let delete = candidate.removingCharacter(at: i) + for index in candidate.indices { + var delete = candidate + delete.remove(at: index) if consideredDeletes.insert(delete).inserted { candidates.append(delete) @@ -531,7 +532,8 @@ class SymSpell { guard deleteLen != 0 else { return true } let suggestionLen = min(prefixLength, suggestionLen) - return !delete.prefix(deleteLen).contains { !suggestion.prefix(suggestionLen).contains($0) } + let suggestionPrefix = suggestion.prefix(suggestionLen) + return !delete.prefix(deleteLen).contains { !suggestionPrefix.contains($0) } } private func parseWords(_ text: String) -> [String] { @@ -558,8 +560,9 @@ class SymSpell { guard word.count > 1 else { return } let editDistance = editDistance + 1 - for i in 0 ..< word.count { - let delete = word.removingCharacter(at: i) + for index in word.indices { + var delete = word + delete.remove(at: index) if deleteWords.insert(String(delete)).inserted, editDistance < maxDictionaryEditDistance { edits(delete, editDistance, &deleteWords) }