编写 SwiftUI 模型以从带有数组的 JSON 文件中读取
Posted
技术标签:
【中文标题】编写 SwiftUI 模型以从带有数组的 JSON 文件中读取【英文标题】:Writing a SwiftUI model to read from a JSON file with Arrays 【发布时间】:2019-10-28 18:27:11 【问题描述】:在处理数据流方面,我非常熟悉,但我试图强迫自己通过构建应用程序来学习它。我正在努力研究如何编写模型以正确引用 JSON 文件中的嵌套键。
JSON 看起来像这样:
[
"id": 1001,
"first_name": "Jimmy",
"last_name": "Simms",
"cities": [
"name": "New York City",
"towns": [
"name": "***lyn"
,
"name": "Manhatten"
]
,
"name": "Tokyo",
"towns": [
"name": "Churo"
,
"name": "Riponggi"
]
]
]
我不确定该怎么做是编写一个模型,让我可以定位数组中的嵌套元素。从广义上讲,我想知道您如何为这个 JSON 集纠正一个 SwiftUI 模型。
这是我在黑暗中的一种尝试:
import SwiftUI
struct MyDataModel: Identifiable
var id: Int
var first_name: String
var last_name: String
var cities: Array<Any>
var cities.name: String
var cities.towns: Array<Any>
var cities.towns.name: String
但是我访问嵌套数组“Cities”和第二级“Towns”的语法只是组成,我可以找到如何访问这样的嵌套键的参考?任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:基本上你想为嵌套组件创建结构。 MyDataModel
有一个城市数组,因此需要一个 City
对象数组。同样,每个City
都有一个城镇数组,因此需要一个Town
对象数组。
假设您正在从 api 访问 JSON 并希望将其转换为对象,您需要使其符合 Codable
,这相当简单。按照惯例,Swift 不使用蛇形大小写作为变量名,而是使用驼峰式大小写,因此您可以使用枚举作为编码键,也可以在解码器中传递一个选项。
struct MyDataModel: Codable, Identifiable
let id: Int
let firstName: String
let lastName: String
let cities: [City]
enum CodingKeys: String, CodingKey
case id
case firstName = "first_name"
case lastName = "last_name"
case cities
struct City: Codable
let name: String
let towns: [Town]
struct Town: Codable
let name: String
更新
你可以用它做这样的事情,其中myDataModels
是你的MyDataModel
的数组:
var body: some View
List
ForEach(myDataModels) model in
Section(header: Text("\(model.firstName) \(model.lastName)"))
ForEach(model.cities, id: \.name) (city: City) in
Section(header: Text(city.name).fontWeight(.bold))
ForEach(city.towns, id: \.name) town in
Text(town.name)
看起来像这样:
【讨论】:
太棒了。谢谢安德鲁——非常有帮助!您能否分享一个示例,说明如何在视图中引用城镇名称? @FuegoDeBassi 我添加了一个小代码示例,展示了如何从数据构建视图。 哇,这正是我想要达到的目标。我在 body 调用上方添加了 var myDataModels: [MyDataModel] ,但我不清楚如何在我的 PreviewProvider 中引用它然后引用 myDataModels? 我很高兴它有所帮助。听起来您确实需要进一步的帮助。我建议将相关部分写成一个新问题(甚至可能是几个问题),以便您可以清楚地表达您需要做的所有事情,因为 SO 上的 cmets 并不允许进行详细的讨论。一方面,这里的代码格式不好;其次,你被限制在 600 个字符以内,所以很难充分表达自己。 点很好。准确地写出我想要表达的内容本身就是一个有用的练习。 ***.com/questions/58597549/…以上是关于编写 SwiftUI 模型以从带有数组的 JSON 文件中读取的主要内容,如果未能解决你的问题,请参考以下文章