【发布时间】:2017-09-23 17:50:12
【问题描述】:
我正在试图弄清楚为什么使用可选 URL 会导致我的 JSON 解码在使用 Swift 4 时失败。我已经倾注了 WWDC “Whats new in Foundation”视频、Apples Playground 示例和一堆关于上网,但没有找到解决办法。
这是我为显示问题而创建的测试。说这是我的 json 数据:
let json = """
{
"kind" : "",
"total" : 2,
"image_url" : "https://www.myawesomeimageURL.com/awesomeImage.jpg"
}
""".data(using: .utf8)!
这是我的结构:
struct BusinessService: Decodable {
let kind: String?
let total: Int
let image_url : URL?
}
这是我对其进行序列化的地方:
let myBusiness = try? JSONDecoder().decode(BusinessService.self, from: json)
print(myBusiness)
现在,问题是如果我收到缺少 image_url 的 json 数据,则 json 解码失败并给我 nil。
我很困惑为什么“种类”可以是一个可选的字符串,并且在它没有值时不会导致 json 解码失败,但是 image_url 不能是一个可选的 URL 而不会导致 json 失败。
我已经尝试了两天了,但没有运气。有没有人知道为什么这会失败?
我确实注意到了另一个难题,那就是 json 中的 image_url 实际上不必是有效的图像 URL。我可以输入任何字符串并且我的结构被序列化,所以我想我可能误解了它是如何工作的。我认为只有当它可以转换为有效的 URL 并且没有发生时,才会自动填充 URL。
对此的任何见解将不胜感激。
【问题讨论】:
标签: swift ios11 json-deserialization swift4