首页 > 解决方案 > 来自 JSON/Dictionary 的 SwiftUI 列表

问题描述

刚开始使用 SwiftUI,所以为这个基本问题道歉。我有一个从以下格式的 JSON 文件创建的字典:

{
 {
  "first_name": "John",
  "last_name": "Doe",
  "email": "John.doe@domain.com"
 },
 {
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "Jane.doe@domain.com"
 }
}

我想创建一个 first_name 列表,然后可以在其他文件中使用,名称是唯一的,因此不需要 UUID。到目前为止,我可以将我的数据加载到一个 swift 文件中并使用以下方法显示它:

struct DataTest: View {
let people = Bundle.main.decode("people.json")
var body: some View {
    VStack{
        ForEach(0 ..< people.count){number in
            Text("\(people[number].first_name)")
        }
    }
}
}

有什么方法可以在不使用 ForEach 循环的情况下生成数组或列表?我绑定了@State private var = people.first_name 之类的东西,但这似乎不起作用。

标签: jsonswiftlistswiftui

解决方案


假设是这个结构:

struct Person {
  var first_name : String
  var last_name : String
  var email: String
} 

并且people[Person],您可以像这样映射单个属性:

let firstNamesOnly = people.map { $0.first_name }

或者,在 Swift 5.2 中新增:

let firstNamesOnly = people.map(\.first_name)

您可以在计算属性中使用它并List执行以下操作:

var firstNames : [String] {
        people.map(\.first_name)
    }
    
    var body: some View {
        VStack{
            ForEach(firstNames, id: \.self) { firstName in
                Text(firstName)
            }
        }
    }

推荐阅读