ios - 将数据传递给列表
问题描述
这段代码可能有什么问题?
import SwiftUI
struct ContentView : View {
let usersData = [User.init(name_: "shauket", profession_: "Software Engineer", age_: 30), User.init(name_: "Adil", profession_: "Software Engineer", age_: 24), User.init(name_: "Arslan", profession_: "Software Engineer", age_: 28), User.init(name_: "Ahmed", profession_: "Software Engineer", age_: 30), ]
var body: some View {
List(usersData) { user in
// here i can not access user
}
}
}
struct User {
var name: String
var profession: String
var age: Float
init(name_: String, profession_: String, age_: Float ) {
self.name = name_
self.profession = profession_
self.age = age_
}
}
解决方案
usersData 应该是一个可识别的数组。即,包含符合 Identifiable 协议的元素的数组。对于符合 Identifiable 的类型,您基本上需要一个名为 id 的属性。
或者,如果您有另一个可以唯一标识您的元素的属性,您可以将它与identified(by:) 方法(beta 3)或 List(_:id:)(beta 4)一起使用。在您的情况下,如果我们使用名称作为唯一标识符,您可以执行以下操作:
注意:截至目前,Xcode beta 4 尚未发布。但是 Catalina beta 4 的发行说明表明 .identified(by:) 将被 List(_:id:) 弃用。我包含了大概的语法,但我目前无法测试。
// Beta 3 syntax
List(usersData.identified(by: \.name)) { user in
Text(user.name)
}
// Beta 4 syntax
List(usersData, id: \.name) { user in
Text(user.name)
}
如果您无法生成可识别的数组,您可以通过索引访问它:
List(0..<usersData.count) { i in
Text(self.usersData[i].name)
}
如果你更喜欢让你的User
身份可识别,你会做这样的事情:
struct ContentView : View {
let usersData = [User.init(id: 0, name_: "shauket", profession_: "Software Engineer", age_: 30), User.init(id: 1, name_: "Adil", profession_: "Software Engineer", age_: 24), User.init(id: 2, name_: "Arslan", profession_: "Software Engineer", age_: 28), User.init(id: 3, name_: "Ahmed", profession_: "Software Engineer", age_: 30), ]
var body: some View {
List(usersData) { user in
Text(user.name)
}
}
}
struct User: Identifiable {
var id: Int
var name: String
var profession: String
var age: Float
init(id: Int, name_: String, profession_: String, age_: Float ) {
self.id = id
self.name = name_
self.profession = profession_
self.age = age_
}
}
无论如何,请确保您用来标识元素的属性确实是唯一的。否则,您的 List 可能会产生奇怪的结果。
推荐阅读
- python - FastAPI & GINO 无法从数据库中的表中获取所有行
- python - 使用last对数据帧进行上采样后如何摆脱NaN?
- ansible - Ansible:如何在 CSV 文件中查找并填充相关文件内容
- qtimer - Qtimer:每 2000 毫秒调用一次不同的插槽
- javascript - 如何在功能组件之间获取道具?
- node.js - 为什么我的护照快递不再起作用了?
- mongodb - 将序列号添加到来自 mongodb 查询的项目
- angular - 如何从另一个项目开始创建一个全新的 Angular 项目?
- java - 在项目中找不到生成的 Javadoc 文件
- python - 如何与 C# 客户端和 Python 服务器建立 (TCP) LAN 套接字连接?