在 SwiftUI 中将 JSON 数据作为对象加载
Posted
技术标签:
【中文标题】在 SwiftUI 中将 JSON 数据作为对象加载【英文标题】:Loading JSON data as object in SwiftUI 【发布时间】:2021-01-21 08:20:06 【问题描述】:在 swiftui 上遵循苹果开发者教程,https://developer.apple.com/tutorials/swiftui/
我想稍微修改一下,以便在对象 Landmark 中包含更多字段:
例如:
struct Landmark: Hashable, Codable, Identifiable
var id: Int
var name: String
var park: String
var state: String
var description: String
var isFavorite: Bool
var isFeatured: Bool
var comment: String // example, added this field
然而,对于这个字段,我想用它来让用户输入评论。该字符串在 .json 文件中不可用,因此无法在“加载”-ing json 数据的阶段填写此信息。
我发现当这个字段在 JSON 文件中不可用时,这会导致错误和应用程序崩溃。我该如何解决这个问题?对象中的所有字段都必须出现在 JSON 文件中吗?
【问题讨论】:
【参考方案1】:由于comment
字段可能不存在,您应该将其设为可选类型:
struct Landmark: Hashable, Codable, Identifiable
var id: Int
var name: String
var park: String
var state: String
var description: String
var isFavorite: Bool
var isFeatured: Bool
var comment: String? // example, added this field
【讨论】:
即使我已将其设为可选,但如果该字段不在 JSON 中,应用程序将崩溃。 您能否在控制台日志中分享崩溃的详细信息?【参考方案2】:如果您的结构中只有一些属性包含在 json 中,那么通过添加仅包含 json 属性的 CodingKey
枚举并让其他属性可选或为它们提供一个默认值。
由于我不知道原始 json,我在下面的示例中假设最后 3 个属性不包含在 json 中
struct Landmark: Hashable, Codable, Identifiable
var id: Int
var name: String
var park: String
var state: String
var description: String
var isFavorite: Bool = false //use default value
var isFeatured: Bool = false //use default value
var comment: String? //make optional
enum CodingKeys: String, CodingKey
case id
case name
case park
case state
case description
【讨论】:
以上是关于在 SwiftUI 中将 JSON 数据作为对象加载的主要内容,如果未能解决你的问题,请参考以下文章