Вступить в клуб →
средняявопросUIKit и SwiftUI: экраны и состояние

Ввод в поиске сбрасывает список: как объявлена ViewModel в SwiftUI-вью

struct OrdersView: View {
    @ObservedObject private var viewModel = OrdersViewModel()
    @State private var query = ""

    var body: some View {
        VStack {
            TextField("Поиск", text: $query)
            List(viewModel.orders) { order in
                Text(order.title)
            }
        }
    }
}

При вводе каждого символа список моргает и загрузка заказов стартует заново. Что не так?

  • @State и @ObservedObject нельзя использовать в одной вью, их обновления конфликтуют
  • List пересоздаёт свои ячейки при каждом обновлении тела вью, поэтому запросы уходят повторно; поможет модификатор .id на List
  • ViewModel создаётся в теле структуры-вью и пересоздаётся вместе с ней; владеть объектом должен @StateObject
  • @ObservedObject не подписывается на objectWillChange, поэтому нужно вызывать objectWillChange.send() вручную

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела