我这里有这个字符串:
let toEscape = "http://localhost:3000/api/Tests/update?where={ \"name\": \(updateText) }"
这个字符串通常没问题,只是我连接的 API 软件 (Strongloop) 似乎不喜欢 \"name\" 处的反斜杠。如何转义整个字符串,以便不必在引号前添加反斜杠?在 C# 中,您可以在字符串的开头使用 @ 符号,据说您可以在 Objective-C 中执行相同的操作,但我在 Swift 中还无法做到这一点,至少到目前为止还不能。
一个可能的解决方案是使用 NSURL(scheme:host:path:) 创建一个 NSURL 并调用absoluteString()方法
let escapedString = NSURL(scheme: "http", host: "localhost:3000", path: "/api/Tests/update?where={ \"name\": \(updateText) }")?.absoluteString
编辑:
或者更容易
let escapedString = toEscape.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
简短回答:是的,请参阅上面的 URL 编码答案。
长答案:也许斜线不是问题。使用
\"
转义双引号多年来一直是高级语言的标准,并且在 Swift 文档中被认为是正确的语法(上面的链接)。
我注意到的是,如果你的查询参数应该是 JSON,那么它的格式是错误的。您需要将插值括起来,使其成为有效的 JSON:
let toEscape = "...?where={ \"name\": \"\(updateText)\" }"
我对 Swift 的经验为零,也没有任何 Strongloop 的经验,但我会先尝试引用
updateText
,看看问题是否有变化。