迅捷;MVVM:如何制作动画;列表元素更改“;当视图模型更改时;数据源“;(`@Publish items`)本身
我对SwfitUI和Combine还比较陌生,所以我可能尝试做一些非常不正确的事情,但我就是看不到如何实现我使用SwiftUI和MVVM的目标。 以下是场景:迅捷;MVVM:如何制作动画;列表元素更改“;当视图模型更改时;数据源“;(`@Publish items`)本身,mvvm,swiftui,Mvvm,Swiftui,我对SwfitUI和Combine还比较陌生,所以我可能尝试做一些非常不正确的事情,但我就是看不到如何实现我使用SwiftUI和MVVM的目标。 以下是场景: ViewModel带有属性的类@Published var items=[String]() 主视图(HomeView),具有一个显示其视图模型中的项目的ForEach HomeView有一个@StateObject变量viewModel:viewModel HomeViewForEach使用viewModel中的项 ViewModel
带有属性的类ViewModel
@Published var items=[String]()
- 主视图(HomeView),具有一个显示其视图模型中的项目的
ForEach
- HomeView有一个
@StateObject变量viewModel:viewModel
HomeView
使用viewModel中的ForEach
项
更改ViewModel
(在我的例子中,核心数据更改)项
HomeView
会立即反映更改ForEach
ForEach
中的元素设置动画,因为viewModel.items
发生了变化
我可以做的是将SwiftUI
导入视图模型
,并使用和动画
包装新项目的设置
。但这超出了ViewModel的目的,因为它现在直接引用UI代码
以下是我的一些代码:
struct HomeView: View {
@StateObject var viewModel: ViewModel
var body: some View {
ForEach(items) { item in
Text(item)
}
}
}
如果这能让MVVM高兴并与SwiftUI一起工作,有什么想法吗?将动画添加到保存视图项的容器中,如下所示
var body: some View {
VStack { // << container
ForEach(items) { item in
Text(item)
}
}
.animation(.default) // << animates changes in items
}
var主体:一些视图{
VStack{//您的视图可以通过切换在您的ViewModel中观察到一些布尔属性,例如切换(“,isOn:$ViewModel.someBoolProperty)。通过这种方式,您可以将工作转移到ViewModel。这就像一个符咒。谢谢。
var body: some View {
VStack { // << container
ForEach(items) { item in
Text(item)
}
}
.animation(.default) // << animates changes in items
}