我为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
中删除了string
和replacingOccurrences
。我意识到,在执行语句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
中删除了string
和replacingOccurrences
。我意识到,在执行语句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: "")
}