Я немного борюсь с тем, как управлять данными и держать все разделенным. У меня есть представление списка (его данные получают через 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 . Моя проблема с этим решением состоит в том, что я не знаю, как проверить, была ли удаление успешной, поэтому я знаю, когда следует отпустить лист и когда не делать. Edititemview можно проверить, было ли удаление успешным. Когда я попробовал это, в первый раз, когда я боролся с тем фактом, что функция удаления модели является асинхронной , во время второй попытки было тривиально легко заставить ее работать. В просмотре редактирования я проверяю, успешно ли удаление и, если да, отклоните представление «Редактировать».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) {
await model.deleteItem(item: item)
}
}
}
}
}
}
< /code>
struct EditItemView: View {
@Environment(\.dismiss) private var dismiss
@Bindable var item: Item
@State private var model = EditItemViewModel()
var removal: (() async -> Bool)? = nil
var body: some View {
// Functionality to edit the item omitted.
Button("Delete", role: .destructive) {
Task {
let deletedItem = await removal?() ?? false
if deletedItem {
dismiss()
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-a-sheet
Как я могу удалить элемент из списка, используя лист? ⇐ IOS
Программируем под IOS
-
Anonymous
1753348681
Anonymous
Я немного борюсь с тем, как управлять данными и держать все разделенным. У меня есть представление списка (его данные получают через 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 . Моя проблема с этим решением состоит в том, что я не знаю, как проверить, была ли удаление успешной, поэтому я знаю, когда следует отпустить лист и когда не делать. Edititemview можно проверить, было ли удаление успешным. Когда я попробовал это, в первый раз, когда я боролся с тем фактом, что функция удаления модели является асинхронной , во время второй попытки было тривиально легко заставить ее работать. В просмотре редактирования я проверяю, успешно ли удаление и, если да, отклоните представление «Редактировать».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) {
await model.deleteItem(item: item)
}
}
}
}
}
}
< /code>
struct EditItemView: View {
@Environment(\.dismiss) private var dismiss
@Bindable var item: Item
@State private var model = EditItemViewModel()
var removal: (() async -> Bool)? = nil
var body: some View {
// Functionality to edit the item omitted.
Button("Delete", role: .destructive) {
Task {
let deletedItem = await removal?() ?? false
if deletedItem {
dismiss()
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79692780/how-can-i-remove-an-item-from-a-list-using-a-sheet[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия