将父视图 viewModel 的 @Published 属性绑定到子视图 viewModel 的 @Published 属性:SwiftUI

时间:2021-02-08 10:17:30

标签: swift mvvm swiftui

我有这个设置: 父视图:PostsListView 子视图:PostEditView

  • PostsListView 显示帖子的列表简短描述
  • 点击任何帖子,我会呈现子视图:PostEditView
  • 目标是改变 post here call API,当用户返回 PostsListView 时,它应该显示更新的描述

我在 PostsListView 中使用 MVVM

@ObservedObject var viewModel : PostsListViewModel    
LazyVGrid(columns: columns) {
                    ForEach(viewModel.posts, id: \.self) { post in
                        NavigationLink(
                            destination: PostEditView(viewModel: PostEditViewModel(post: post))){
                                Text(post: post)
                                    .lineLimit(3)
                        }
                    }
                }

我将视图模型(PostEditViewModel(post:)) 从父视图传递给 childView。

我不确定如何在两个视图的 viewModel 之间绑定这个“post”对象。

仅供参考视图模型:

PostsListViewModel:

class PostsListViewModel: ObservableObject{
    @Published var posts: [Post]
    //api operations....
}

PostEditViewModel:

class PostEditViewModel: ObservableObject{
    @Published var post: Post
    //custom Post mutation and api operations....
}

1 个答案:

答案 0 :(得分:0)

您不需要进行任何特殊的合并操作。只需确保 Post 是引用类型 (class) 并将 Post 实例从 PostListViewModel.posts 传递到 PostEditViewModel.post,这样每当您改变子 VM 中的 Post 对象,相同的更改也将反映在父 VM 上,因为 Post 对象是引用类型,并且两个 VM 都引用了相同的对象。