我一直在努力找JSONEncoder
工作dataEncodingStrategy
。
我需要获取我的 http 正文数据而不在 API 请求中转义withoutEscapingSlashes: JSONEncoder.OutputFormatting
,JSONEncoder
但不幸的是,这仅适用于 iOS >= 13,而我的应用程序支持 iOS >= 11。
这就是我目前所拥有的:
let encoder = JSONEncoder()
if #available(iOS 13, *) {
encoder.outputFormatting = .withoutEscapingSlashes
} else {
// Fallback to earlier versions here!
// Looking for a workaround and I believe "dataEncodingStrategy" is what I am looking for.
}
try encoder.encode(data)
这是 Playground 的一个简单示例,用于测试目的,向您展示我写的内容。
JSONEncoder.DataEncodingStrategy.custom
(即var strategy)永远不会被调用。
import Foundation
struct Model: Encodable {
let key: String = "key goes here..."
}
var strategy: JSONEncoder.DataEncodingStrategy = .custom({ (data, encoder) in
print("CALLED!") // This is never printed.
if var string = String(data: data, encoding: .utf8) {
string = string.replacingOccurrences(of: "key", with: "REPLACED")
var container = encoder.singleValueContainer()
let data = string.data(using: .utf8)
try container.encode(data)
}
})
let encoder = JSONEncoder()
encoder.dataEncodingStrategy = strategy
let m = Model()
let d = try! encoder.encode(m)
let str = String(data: d, encoding: .utf8)
print(str)
dataEncodingStrategy
无论如何总是被解雇。它永远不会被调用。它没有被弃用或什么的。有人知道这里发生了什么吗?
虽然这个问题是特定于JSONEncoder
's 的dataEncodingStrategy
,但对于 iOS < 13,任何其他保留 http 正文数据而不转义的方法也会有所帮助。