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

SwiftUI移除字符串引号时replacingOccurrences方法失效问题

问题原因

你当前的替换逻辑只匹配了ASCII编码的半角直引号 "(对应Unicode编码U+0022),也就是你在testA里手动写的引号类型。
从输入框拿到的moveAddy里残留的引号,是输入法/系统智能标点功能自动转换的非ASCII引号,和你写的匹配字符不是同一个,所以替换逻辑没命中。常见的这类引号包括:

  • 左弯双引号 “(U+201C)
  • 右弯双引号 ”(U+201D)
  • 中文全角双引号 "(U+FF02)
  • 单弯引号/全角单引号 ‘、’、'
排查验证方法

你可以打印目标字符串每个字符的Unicode编码,直接确认未被替换的引号具体是哪种类型:

for scalar in testB.unicodeScalars {
    debugPrint("字符: \(scalar), 编码值: \(scalar.value)")
}

对照Unicode编码表就能定位到具体字符。

可行解决方案

方案1:全量匹配所有引号类型做移除

把所有常见引号类型纳入过滤规则,不需要依赖输入源设置:

let allQuoteChars: Set<Character> = ["\"", "“", "”", """, "‘", "’", "'"]
let testBtrimmed = testB.filter { !allQuoteChars.contains($0) }

如果排查到还有其他特殊引号类型,直接把对应字符加到上面的集合里即可。

方案2:从输入源头关闭智能引号转换

如果你的输入控件是UITextField(iOS)或者NSTextField(macOS),可以直接关闭智能引号替换功能,让用户输入的引号统一为半角直引号,原有替换逻辑就能正常生效:

// iOS UIKit 配置
textField.smartQuotesType = .no

// macOS AppKit 配置
textField.isAutomaticQuoteSubstitutionEnabled = false

内容的提问来源于stack exchange,提问作者aa._.ron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:48:19