【发布时间】:2020-09-09 00:35:04
【问题描述】:
我使用的一个 API 提供了 URL 链接,其中可以包含特殊字符,例如“http://es.dbpedia.org/resource/Analisis_de_datos”(里面的字母“á”)。
这是一个绝对有效的 URL,但是,如果可解码类包含可选的 URL? 变量,则无法对其进行解码。
我可以在我的班级中将URL? 更改为String?,并有一个类似于URL(string: urlString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) 的计算变量,但也许有更优雅的解决方案。
在 Playground 中重现:
struct Container: Encodable {
let url: String
}
struct Response: Decodable {
let url: URL?
}
let container = Container(url: "http://es.dbpedia.org/resource/Análisis_de_datos")
let encoder = JSONEncoder()
let encodedData = try encoder.encode(container)
let decoder = JSONDecoder()
let response = try? decoder.decode(Response.self, from: encodedData)
// response == nil, as it can't be decoded.
let url = response?.url
【问题讨论】:
-
自定义解码怎么样?你考虑过吗?
-
是的,我有。但是,该类本身有大约 20 个变量和 12 个嵌套结构。这不值得)
标签: json swift url codable decodable