You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除字符串中的智能引号?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:26:03