字符串扩展的突变导致巨大的CPU影响



我为String类创建了一个小扩展,以方便地从中删除字符

mutating func drop(characters chars: [String]) {
    for c in chars {
        self = self.replacingOccurrences(of: c, with: "")
    }
}

用法:

//string = ""Test"" (contains quotes), should be "Test" (w/ quotes)
string.drop(characters: ["""])

现在,当我用字符串调用这个函数时,CPU会崩溃,导致应用程序最终崩溃。

有什么想法吗
谢谢


更新

我意识到以下代码也会对CPU造成巨大影响,所以这显然不是我的扩展的问题,而是其他问题:

string = string.replacingOccurrences(of: """, with: "")

更新#2/解决方案

我发现了问题。我在while循环中执行上述语句,该循环在superString内的字符串不存在时结束。为了实现这一点,我从superString中删除了stringreplacingOccurrences。我意识到,在执行语句string之后的显然与以前在superString中出现的情况不同
长话短说:在
superString中删除string之后,我不得不执行语句,否则while循环将永远不会结束,这将导致CPU影响&崩溃

尽管如此,还是感谢您的帮助!

一个避免多次更改字符串的建议是,可以像这样重写函数:

mutating func drop(charactersIn string: String) {
    self = String(
        self.characters.filter { !string.characters.contains($0) }
    )
}
// And then for example:
string.drop(charactersIn: ""tT")

解决方案

我在while loop中执行上述语句,该语句在superString中的string不存在时结束
为了实现这一点,我从superString中删除了stringreplacingOccurrences。我意识到,在执行语句string之后,它显然不像以前在superString中出现的那样。

长话短说:我必须在从superString中删除字符串后执行该语句,否则while loop将永远不会结束,这会导致CPU影响&崩溃

视觉:

while superString.contains(pattern: myPattern) {
    var string = superString.searchFor(myPattern).get(0)!
    textfile = textfile.replacingOccurrences(of: string, with: "")
    string.drop(charactersInRegex: ["""])
    myArray.append(string)
}

而不是

while superString.contains(pattern: myPattern) {
    var string = superString.searchFor(myPattern).get(0)!
    string.drop(charactersInRegex: ["""])
    myArray.append(string)
    textfile = textfile.replacingOccurrences(of: string, with: "")
}

最新更新