gpt4 book ai didi

json - Swift 4 Decodable - 附加变量

转载 作者:IT王子 更新时间:2023-10-29 05:41:36 25 4
gpt4 key购买 nike

一些我还没有弄清楚或已经能够在网上找到的东西。

有没有办法将附加字段添加到包含 JSON 数据中不存在的可解码协议(protocol)的结构中?

举个简单的例子,假设我有一个这样构造的 json 对象数组

{ "name": "name1", "url": "www.google.com/randomImage" }

但是说我想将一个 UIImage 变量添加到包含可解码的结构中,例如

struct Example1: Decodable {
var name: String?
var url: String?
var urlImage: UIImage? //To add later
}

有没有一种方法可以实现可解码协议(protocol),以便从 JSON 中获取名称和 url,但允许我稍后添加 UIImage?

最佳答案

要排除urlImage,您必须手动符合Decodable,而不是让它的要求被合成:

struct Example1 : Decodable { //(types should be capitalized)
var name: String?
var url: URL? //try the `URL` type! it's codable and much better than `String` for storing URLs
var urlImage: UIImage? //not decoded

private enum CodingKeys: String, CodingKey { case name, url } //this is usually synthesized, but we have to define it ourselves to exclude `urlImage`
}

在 Swift 4.1 之前,这仅在您将 = nil 添加到 urlImage 时有效,即使 nil 的默认值通常被假定为可选特性。

如果你想在初始化时为urlImage提供一个值,而不是使用= nil,你也可以手动定义初始化器:

    init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
url = try container.decode(URL.self, forKey: .url)
urlImage = //whatever you want!
}

关于json - Swift 4 Decodable - 附加变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46104870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com