来自 JSON/Dictionary 的 SwiftUI 列表

Posted

技术标签:

【中文标题】来自 JSON/Dictionary 的 SwiftUI 列表【英文标题】:SwiftUI List from JSON/Dictionary 【发布时间】:2021-03-20 22:43:15 【问题描述】:

刚开始使用 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 之类的东西,但这似乎不起作用。

【问题讨论】:

您是在问如何从数组中获取单个条目?尽管您遗漏了一些代码,但似乎people 已经是一个数组。 我没有正确解释,所以我想得到一个只有名字的列表,在这种情况下,列表应该是 ["John", "Jane"] 【参考方案1】:

假设是这样的结构:

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)
            
        
    

【讨论】:

以上是关于来自 JSON/Dictionary 的 SwiftUI 列表的主要内容,如果未能解决你的问题,请参考以下文章

swif解决手势冲突

swift 在swif打开网址

Swif基础语法01

swif tableview全选

swif-throws异常抛出

登录屏幕 SWIF5 后返回上一个 viewController