[英]How do I get the index of my environment object array in SwiftUI?
我正在努力獲取我在 for each 循環中使用的 object 的索引。 我正在嘗試在數組中的每個項目旁邊添加一個刪除按鈕,以從 object 數組中刪除該項目。 所以我會在 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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.