संभाल करने के लिए कैसे .onDelete के लिए SwiftUI सूची के साथ सरणी .(उलट)

0

सवाल

मैं कोशिश कर रहा हूँ बनाने के लिए एक बुनियादी 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)
    }
}
arrays swift swiftui swiftui-list
2021-11-21 23:25:33
2

सबसे अच्छा जवाब

1

आप भी इस दृष्टिकोण की कोशिश करो:

.onDelete { index in
    // get the item from the reversed list
    let theItem = viewModel.itemList.reversed()[index.first!]
    // get the index of the item from the viewModel, and remove it
    if let ndx = viewModel.itemList.firstIndex(of: theItem) {
        viewModel.itemList.remove(at: ndx)
    }
}
2021-11-22 00:15:13
1

चेतावनी: यह नहीं हो सकता है सबसे कुशल एल्गोरिदम विधि है । हालांकि, के लिए सरल हटाने पर एक List, यह प्रदर्शन करना चाहिए ठीक है.

.onDelete { offsets in
    let reversed = Array(viewModel.itemList.reversed()) //get the reversed array -- use Array() so we don't get a ReversedCollection
    let items = Set(offsets.map { reversed[$0].id }) //get the IDs to delete
    viewModel.itemList.removeAll { items.contains($0.id) } //remove the items with IDs that match the Set
}
2021-11-22 00:11:34

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में