如何移除字符串中的智能引号?Swift扩展失效问题求助
Swift字符串智能引号替换问题的解决方法
问题原因
你的扩展未生效的核心问题是每次替换操作都基于原始字符串self,而非已修改后的newString。第一次替换后得到的结果会被第二次基于self的替换覆盖,导致前面的修改全部丢失,最终只有最后一次替换(双引号转单引号)可能执行,其他智能引号的替换完全没起到作用。
修正后的代码
将后续替换操作改为基于已修改的newString,累积执行替换:
extension String { func plainText() -> String { var newString = self.replacingOccurrences(of: "\u{0060}", with: "'") newString = newString.replacingOccurrences(of: "\u{00b4}", with: "'") newString = newString.replacingOccurrences(of: "\u{2018}", with: "'") newString = newString.replacingOccurrences(of: "\u{2019}", with: "'") newString = newString.replacingOccurrences(of: "\u{201c}", with: "'") newString = newString.replacingOccurrences(of: "\u{201d}", with: "'") newString = newString.replacingOccurrences(of: "\"", with: "'") return newString } }
更高效的优化写法
可以通过字符映射表一次性替换所有目标字符,代码更简洁且执行效率更高:
extension String { func plainText() -> String { // 定义所有需要替换的字符与目标单引号的映射 let quoteMap: [Character: Character] = [ "\u{0060}": "'", "\u{00b4}": "'", "\u{2018}": "'", "\u{2019}": "'", "\u{201c}": "'", "\u{201d}": "'", "\"": "'" ] // 遍历每个字符,替换或保留原字符 return String(self.map { quoteMap[$0] ?? $0 }) } }
验证效果
调用myString.plainText()后,原字符串中的所有智能引号、双引号都会被替换为普通ASCII单引号,输出结果如下:
February 11, 2012 This natural-color image showing Acme Inc's logo... bla bla bla 'Mount Everest'... bla bla 'Black Viper' ... bla bla. 'Naja'
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

