Я пытаюсь добавить элементы в массив в 1 представлении, а затем показать этот массив в другом представлении, используя цикл foreach, но я продолжаю получать эти ошибки.
Cannot convert value of type '(Store).Type' to expected argument type 'Binding<C>'
и Generic parameter 'C' could not be inferred
Вот мой класс — импорт SwiftUI
class StoreViewModel: ObservableObject{
@Published var item: [String] = []
@Published var amount: [String] = []
}
и здесь я пытаюсь показать добавленные элементы
import SwiftUI
struct Store: View {
@State var presented: Bool = false
@State var showingAlert:Bool = false
@StateObject var store = StoreViewModel()
var body: some View {
ScrollView{
VStack{
HStack{
Button {
showingAlert = true
} label: {
Image(systemName: "trash")
.foregroundColor(Color.red)
.font(.system(size: 20))
}
.alert("Are you sure you want to remove all items", isPresented: $showingAlert) {
Button("OK", role: .destructive) {
withAnimation(.easeOut(duration: 0.3)){
}
}
}
Text("Your Cupboard")
.font(.system(size: 30))
.fontWeight(.semibold)
.padding()
Spacer()
Button {
presented.toggle()
} label: {
Image(systemName: "plus")
.font(.system(size: 30))
.foregroundColor(Color(hex: "FF0044"))
}
.fullScreenCover(isPresented: $presented, content: AddItem.init)
}
.padding(.horizontal)
Text("Here you can see what you have in your cupboard")
.padding()
.multilineTextAlignment(.center)
Text("Click the + to add an item")
.padding()
ForEach((Store), id: \.self){item in
HStack{
Spacer()
Text(item)
.font(.system(size: 20))
Text("30g")
Spacer()
Button {
} label: {
Image(systemName: "trash")
.foregroundColor(.red)
.font(.system(size: 15))
}
.padding(.trailing)
}
.padding()
}
}
}
.environmentObject(store)
}
}
Что я делаю не так и как мне исправить свои ошибки? Большое спасибо за ваше время и помощь
Чувствительность к регистру имеет значение. Вы имеете в виду store
, экземпляр StoreViewModel
, а не тип self
. Кроме того, целью выражения ForEach
является итерация массива (предположительно item(s)
).
Прежде всего, чтобы избежать путаницы, переименуйте item
в StoreViewModel
во множественном числе.
class StoreViewModel: ObservableObject{
@Published var items: [String] = []
@Published var amount: [String] = []
}
Затем замените
ForEach((Store), id: \.self){ item in
с
ForEach(store.items, id: \.self){ item in