Я немного борюсь с тем, как управлять данными и держать все разделенным. У меня есть представление списка (его данные получают через HTTP -вызов), который может отображать лист для каждого элемента в списке. Из листа элемент может быть удален, это делается с помощью HTTP -запроса, и если это успешно, лист уволен. Я также не знаю, как удалить элемент из списка.
Код: Выделить всё
struct ContentView: View {
@State private var model = ContentViewModel()
@State private var selectedItem: Item?
@State private var showEditSheet = false
var body: some View {
NavigationStack {
List {
ForEach(model.items) { item in
Text(item.name)
.swipeActions {
Button("Edit") {
selectedItem = item
}
}
}
}
.onAppear {
Task {
model.fetchItems()
}
}
.sheet(item: $selectedItem) {
NavigationStack {
ItemEditView(item: item)
}
}
}
}
}
< /code>
struct EditItemView: View {
@Environment(\.dismiss) private var dismiss
@Bindable var item: Item
@State private var model = EditItemViewModel()
var body: some View {
// Functionality to edit the item omitted.
Button("Delete", role: .destructive) {
Task {
let deletedItem = await model.deleteItem(item)
if deletedItem {
dismiss()
}
}
}
}
}
Для меня наиболее очевидным решением было бы использовать одну модель и использовать ее для обоих представлений, передавая ее из ContentView в edititemview . Эта единственная модель будет иметь список (в настоящее время на ContentModelView ) и функцию Delete (в настоящее время на EdititeMViewModel ), удаление элемента из списка, если удаление будет успешным. Тем не менее, все советы, которые я читаю, заключается в том, что каждая точка зрения должна иметь свою собственную модель, и не должна распространяться ни одна модель между представлениями. Там EdititemView принимает дополнительное закрытие следа, которое содержит логику удаления, при этом содержимое закрытия определяется в ContentView . Моя проблема с этим решением состоит в том, что я не знаю, как проверить, была ли удаление успешной, поэтому я знаю, когда увольнять лист, а когда нет.>
Подробнее здесь:
https://stackoverflow.com/questions/796 ... ng-a-sheet