我使用的一种API提供了URL链接,这些链接可能包含特殊字符,比如说"http://es.dbpedia.org/resource/Análisis_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