在嵌套Codable
结构中使用解码器时,有什么方法可以访问父结构的属性?
我能想到的唯一方法(尚未测试)是在父结构中使用手动解码器,在userInfo
字典中设置属性,然后userInfo
在子结构中访问。但这会导致大量的样板代码。我希望有一个更简单的解决方案。
struct Item: Decodable, Identifiable {
let id: String
let title: String
let images: Images
struct Images: Decodable {
struct Image: Decodable, Identifiable {
let id: String
let width: Int
let height: Int
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
width = try container.decode(Int.self, forKey: .width)
height = try container.decode(Int.self, forKey: .height)
// How do I get `parent.parent.id` (`Item#id`) here?
id = "\(parent.parent.id)\(width)\(height)"
}
}
let original: Image
let small: Image
// …
}
}
在上面的示例中,来自服务器的项目 ID 仅在 JSON 中的顶级属性中定义,但我在子项中也需要它们,因此我也可以将它们设置为Identifiable
.