小编SN8*_*N81的帖子

导致 JSON 解码在 Swift 4 中失败的可选 URL

我试图弄清楚为什么使用可选 URL 会导致我的 JSON 解码使用 Swift 4 失败。我已经倾注了 WWDC“Foundation 的新功能”视频、Apples Playground 示例以及互联网上的许多地方,但是还没有找到解决办法。

这是我创建的一个测试来显示问题。说这是我的json数据:

let json = """
{
    "kind" : "",
    "total" : 2,
    "image_url" : "https://www.myawesomeimageURL.com/awesomeImage.jpg"
}
""".data(using: .utf8)!
Run Code Online (Sandbox Code Playgroud)

这是我的结构:

    struct BusinessService: Decodable {
    let kind: String?
    let total: Int
    let image_url : URL?
}
Run Code Online (Sandbox Code Playgroud)

这是我序列化它的地方:

let myBusiness = try? JSONDecoder().decode(BusinessService.self, from: json)
print(myBusiness)
Run Code Online (Sandbox Code Playgroud)

现在,问题是如果我收到缺少 image_url 的 json 数据,则 json 解码失败并给我零。

我很困惑为什么“种类”可以是一个可选的字符串,并且在它没有值时不会导致 json 解码失败,但 image_url 不能是一个可选的 URL,而不会导致 json 失败。

我一直在努力解决这个问题两天了,但没有运气。有没有人知道为什么会失败?

我确实注意到了另一个难题,那就是 json 中的 image_url 实际上不必是有效的图像 URL。我可以输入任何字符串并且我的结构被序列化,所以我想我可能误解了它是如何工作的。我认为只有当 URL 可以转换为有效的 URL …

json-deserialization swift swift4 ios11

7
推荐指数
1
解决办法
2596
查看次数

标签 统计

ios11 ×1

json-deserialization ×1

swift ×1

swift4 ×1