我有一个“课程”结构,用于解码某些 JSON 值:
struct Course: Decodable, Identifiable {
var name: String?
var courseCode: String
var id: Int
var image_download_url: String?
var term: Term?
private enum CodingKeys: String, CodingKey {
case id
case name
case image_download_url
case term
case courseCode = "course_code"
}
}
我发现 Course 结构也能够存储值非常有用
bgColor
。我是否需要定义一个包含 Course
以及 bgColor
中的所有数据的新结构?
您不需要创建一个新的结构来包含未解码的值,例如
bgColor
。您只需将其作为属性添加到 Course
结构体中,并将其标记为不属于 Codable
解码过程的一部分。这样,bgColor
就可以存储不是来自 JSON 的数据。
以下是修改结构的方法:
struct Course: Decodable, Identifiable {
var name: String?
var courseCode: String
var id: Int
var image_download_url: String?
var term: Term?
// Non-decoded value
var bgColor: String? // This is not part of the JSON decoding
private enum CodingKeys: String, CodingKey {
case id
case name
case image_download_url
case term
case courseCode = "course_code"
}
}
// Example usage:
let jsonData = """
{
"id": 1,
"name": "Math 101",
"image_download_url": "http://example.com/image.png",
"term": null,
"course_code": "MTH101"
}
""".data(using: .utf8)!
do {
var course = try JSONDecoder().decode(Course.self, from: jsonData)
course.bgColor = "blue" // You can set this manually
print(course)
} catch {
print("Decoding failed: \(error)")
}
这种方法使您的结构保持轻量级,并允许您手动管理属性,例如
bgColor
。