ios - 如何在 SwiftUI 中获取环境对象数组的索引?
问题描述
我正在努力获取我在 for each 循环中使用的对象的索引。我正在尝试在数组中的每个项目旁边添加一个删除按钮,以从对象数组中删除该项目。所以我会在 for each 循环中有一个按钮,并删除该索引处的项目。
任何帮助将不胜感激 :)
import SwiftUI
struct AddedFoods:Identifiable{
var name: String = ""
var totalCals: Double = 0
var totalProtein: Double = 0
var totalCarbs: Double = 0
var totalFat: Double = 0
var id = UUID().uuidString
//Your other properties
}
class FoodAddModel: ObservableObject,Identifiable {
@Published var foods : [AddedFoods]?
var id = UUID().uuidString
init() {
dummyData()
}
func dummyData() {
var obj:[AddedFoods] = []
obj.append(AddedFoods(name: "Pasta", totalCals: 340, totalProtein: 20, totalCarbs: 45, totalFat: 15))
obj.append(AddedFoods(name: "Chicken", totalCals: 560, totalProtein: 20, totalCarbs: 45, totalFat: 15))
obj.append(AddedFoods(name: "Apple", totalCals: 54, totalProtein: 20, totalCarbs: 45, totalFat: 15))
obj.append(AddedFoods(name: "Noodles", totalCals: 231, totalProtein: 20, totalCarbs: 45, totalFat: 15))
foods = obj
}
}
struct myView:View{
@EnvironmentObject var getFood:FoodAddModel
@EnvironmentObject var person: UserInfoModel
var unwrappedFoods:[AddedFoods]{
getFood.foods ?? []
}
var body: some View{
NavigationView{
List{
ForEach(unwrappedFoods) {obj in
let b: String = String(obj.totalCals)
List{
HStack{
Text(obj.name)
Text(b)
}
}
}.onDelete(perform: { indexSet in
/*@START_MENU_TOKEN@*//*@PLACEHOLDER=Code@*/ /*@END_MENU_TOKEN@*/
})
}
}
}
}
解决方案
我最喜欢的模式是使用enumerated()
. 如果你用一个巨大的列表来做这个,你可能想要做一些性能测试,看看它是否在做额外的工作,而不是仅仅在索引上做 for 循环,但就我的目的而言,它工作得很好:
ForEach(Array(unwrappedFoods.enumerated()), id: \.1.id) { (index, obj) in
HStack {
Text(obj.name)
Spacer()
Button(action: {
//delete with index
}) {
Text("Delete")
}
}
}
obj
AddedFoods
像以前一样为您提供, 并且index
(显然)是索引。
id
必须使用.1.id
,因为.1
现在是元组的第二部分(在你的情况下是AddedFoods
)。
推荐阅读
- python - Selenium Python:循环中间 - 陈旧元素错误
- python - 如何在python中计算大规模逆矩阵
- c# - 动态设置@Html.Textbox() 属性?
- graph-databases - Janugraph REINDEX 卡在 INSTALLED 中
- php - 使用 php 更改使用的 woocommerce 电子邮件模板(不自定义模板)
- asp.net-mvc - Visual Studio ASP.NET Web 部署 - 每个引用自定义库的页面都给出错误 404
- git - 如何解决 git push 被拒绝的错误?
- php - 在 Symfony 4 防火墙后面处理 AJAX 调用的正确方法是什么?
- r - 为什么 stringr 和 purrr 函数只有在我创建函数时才能一起工作?
- jquery - 增加,减少输入中的值并且不显示负数