#mvvm #swiftui
#mvvm #swiftui
Вопрос:
Я разрабатываю простое приложение в SwiftUI, где я показываю список лиц с возможностью перехода к сведениям о лицах, а затем их редактирования. Для этого я использую две ViewModels PersonListViewModel
и PersonViewModel
. В основном, PersonListViewModel
включает в себя массив PersonViewModel
. В моем представлении списка я делаю следующее:
struct PersonListView: View {
@EnvironmentObject var personListViewModel: PersonListViewModel
var body: some View {
NavigationView{
List{
ForEach(personListViewModel.personViewModels) { personViewModel in
VStack{
NavigationLink(destination: PersonDetailView().environmentObject(personViewModel)){
Text(personViewModel.person.name)
}
}
}
}
.navigationBarTitle("Persons")
}
}
}
На первый взгляд это работает нормально, но если я что-то изменю в представлении PersonDetailView
с помощью EnvironmentObject personViewModel
, это изменение не отражается при возврате к представлению списка. Однако, если я вернусь к подробному представлению, измененная информация отображается правильно.
Я начинаю сомневаться в своей архитектуре hole MVVM (в основном из-за OO-фона …).
Поэтому мне любопытно, не упускаю ли я чего-то очевидного, почему представление списка не обновляется или есть ли фундаментальный недостаток в моей архитектуре.
Большое спасибо за ваши комментарии.
Комментарии:
1. Использовали ли вы @Published для свойства personViewModels в вашей модели представления?
2. ДА,
final class PersonListViewModel: ObservableObject { @Published var personViewModels = [PersonViewModel]()
3. Какие изменения вы делаете в своем источнике? Добавление / удаление записей в массив personViewModels?
4. Я меняю имя пользователя, которое является свойством
Person
, которое находится в опубликованном var вPersonViewModel
:final class PersonViewModel: ObservableObject, Identifiable { @Published var person: Person
5. Это приводит к такой многоуровневой архитектуре, в которой у меня есть
PersonListViewModel
, которая включает опубликованный массивPersonViewModel
, который затем включает саму модель в качестве опубликованного свойства. Что я сейчас задаю вопрос: действительно ли это «Лучшая практика», когда дело доходит до MVVM?