SwiftUI如何将PostRow中的post.id传递给CommentsViewModel的getComments方法
解决方案
步骤1:修改CommentsViewModel初始化逻辑
调整init方法,拿到传入的post后直接用对应id调用getComments,替换原有CommentsViewModel的init代码:
init(post: PostModel? = nil) { self.post = post if let postId = post?.id { getComments(id: postId) } }
步骤2:修改CommentsView初始化逻辑,给ViewModel传参
给CommentsView新增自定义init方法,将接收的post参数传递给CommentsViewModel,替换原有CommentsView的属性声明代码:
struct CommentsView: View { var post: PostModel @StateObject var commentsData: CommentsViewModel // 新增自定义初始化方法 init(post: PostModel) { self.post = post _commentsData = StateObject(wrappedValue: CommentsViewModel(post: post)) } // 原有ScrollView等业务代码保持不变 }
可选优化方案
如果需要避免在ViewModel初始化阶段执行数据请求,可将getComments调用移到视图生命周期触发:
- 先删除
CommentsViewModel的init方法里的getComments调用 - 在
CommentsView的ScrollView上添加onAppear回调:
ScrollView{ // 原有布局代码不变 } .onAppear { commentsData.getComments(id: post.id) }
现有PostRow中打开评论页的sheet传参逻辑已经正确,无需额外修改。
内容的提问来源于stack exchange,提问作者BubH
相关产品推荐
相关产品推荐

