मैं कोशिश कर रहा हूँ बनाने के लिए एक बुनियादी SwiftUI, जो सूची में प्रत्येक नए सूची आइटम प्रस्तुत किया जाता है के शीर्ष पर सूची. ऐसा करने के लिए, मैं संलग्न किया गया है । उलट() करने के लिए सरणी में पारित कर दिया ForEach पाश, द्वारा प्रतिनिधित्व viewModel.itemList
. मैं भी सेट अप .onDelete संभाल करने के लिए हटाने के आइटम की सूची. हालांकि, जब मैं एक आइटम को हटाने, इस तरह के रूप में सूची में अंतिम आइटम, बजाय इसे हटाता में अंतिम आइटम, सरणी (आइटम के शीर्ष पर सूची). कैसे मैं कॉन्फ़िगर कर सकते हैं .onDelete को नष्ट करने के लिए सही आइटम है जब सरणी उलट है?
मेरे नीचे दिए गए कोड । धन्यवाद!
ContentView
struct ContentView: View {
@StateObject var viewModel = ToDoListViewModel()
@State private var listItemName = ""
var body: some View {
NavigationView {
VStack(alignment: .leading) {
List {
ForEach(viewModel.itemList.reversed()) { item in
Text(item.listItem)
}.onDelete { index in
self.viewModel.itemList.remove(atOffsets: index)
}
}
HStack {
TextField("Enter List Item", text: $listItemName)
Button(action: {
viewModel.addToList(ToDoModel(listItem: listItemName))
listItemName = ""
}) {
Image(systemName: "plus")
.font(.largeTitle)
.frame(width: 75, height: 75)
.foregroundColor(Color.white)
.background(Color.blue)
.clipShape(Circle())
}
}.frame(minWidth: 100, idealWidth: 150, maxWidth: 500, minHeight: 30, idealHeight: 40, maxHeight: 50, alignment: .leading)
.padding(.leading, 16)
.padding(.trailing, 16)
}.navigationBarTitle("To Do List", displayMode: .inline)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
मॉडल
struct ToDoModel: Identifiable, Codable {
var id = UUID()
var listItem: String = ""
}
ViewModel
class ToDoListViewModel: ObservableObject {
@Published var itemList = [ToDoModel]()
func addToList( _ item: ToDoModel) {
itemList.append(item)
}
}